Python程序用于查找数字的偶数因子之和
给定一个数 n,任务是找到一个数的偶因数和。
例子:
Input : 30
Output : 48
Even dividers sum 2 + 6 + 10 + 30 = 48
Input : 18
Output : 26
Even dividers sum 2 + 6 + 18 = 26
设 p1, p2, ... pk 是 n 的素数。令 a1, a2, .. ak 分别为 p1, p2, .. pk 除以 n 的最高幂,即我们可以将 n 写为n = (p1 a1 )*(p2 a2 )* ... (pk ak ) 。
Sum of divisors = (1 + p1 + p12 ... p1a1) *
(1 + p2 + p22 ... p2a2) *
...........................
(1 + pk + pk2 ... pkak)
如果 number 是奇数,则没有偶数因子,所以我们只返回 0。
如果数字是偶数,我们使用上面的公式。我们只需要忽略 2 0 。所有其他项相乘以产生偶数因子和。例如,考虑 n = 18。它可以写成 2 1 3 2并且所有因子的太阳是 (2 0 + 2 1 )*(3 0 + 3 1 + 3 2 )。如果我们删除 2 0那么我们得到
偶数因子之和 (2)*(1+3+3 2 ) = 26。
为了去除偶数因子中的奇数,我们忽略 2 0即 1。在这一步之后,我们只得到偶数因子。请注意,2 是唯一的偶素数。
# Formula based Python3
# program to find sum
# of alldivisors of n.
import math
# Returns sum of all
# factors of n.
def sumofFactors(n) :
# If n is odd, then
# there are no even
# factors.
if (n % 2 != 0) :
return 0
# Traversing through
# all prime factors.
res = 1
for i in range(2, (int)(math.sqrt(n)) + 1) :
# While i divides n
# print i and divide n
count = 0
curr_sum = 1
curr_term = 1
while (n % i == 0) :
count= count + 1
n = n // i
# here we remove the
# 2^0 that is 1. All
# other factors
if (i == 2 and count == 1) :
curr_sum = 0
curr_term = curr_term * i
curr_sum = curr_sum + curr_term
res = res * curr_sum
# This condition is to
# handle the case when
# n is a prime number.
if (n >= 2) :
res = res * (1 + n)
return res
# Driver code
n = 18
print(sumofFactors(n))
# This code is contributed by Nikita Tiwari.
输出:
26
有关详细信息,请参阅有关查找一个数的偶数因子和的完整文章!