📌  相关文章
📜  用于查找数字的奇数之和的Python程序

📅  最后修改于: 2022-05-13 01:56:56.348000             🧑  作者: Mango

用于查找数字的奇数之和的Python程序

给定一个数字 n,任务是找到奇数因子和。

例子:

Input : n = 30
Output : 24
Odd dividers sum 1 + 3 + 5 + 15 = 24 

Input : 18
Output : 13
Odd dividers sum 1 + 3 + 9 = 13

设 p 1 , p 2 , ... p k是 n 的素数。设a 1 , a 2 , .. a k分别为p 1 , p 2 , .. p k的除n的最高幂,即我们可以将n写成n = (p 1 a 1 )*(p 2 a 2 )* … (p k a k )

Sum of divisors = (1 + p1 + p12 ... p1a1) * 
                  (1 + p2 + p22 ... p2a2) *
                  .............................................
                  (1 + pk + pk2 ... pkak) 

要找到奇数因子的总和,我们只需要忽略偶数因子及其幂即可。例如,考虑 n = 18。它可以写成 2 1 3 2并且所有因子的太阳是 (1)*(1 + 2)*(1 + 3 + 3 2 )。奇数因子之和 (1)*(1+3+3 2 ) = 13。

为了去除所有偶数因子,我们在 n 可以被 2 整除的同时重复除以 n。在这一步之后,我们只得到奇数因子。请注意,2 是唯一的偶素数。

Python3
# Formula based Python3 program 
# to find sum of all divisors
# of n.
import math
  
# Returns sum of all factors
# of n.
def sumofoddFactors( n ):
      
    # Traversing through all 
    # prime factors.
    res = 1
      
    # ignore even factors by 
    # of 2
    while n % 2 == 0:
        n = n // 2
      
    for i in range(3, 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+=1
              
            n = n // i
            curr_term *= i
            curr_sum += curr_term
          
        res *= curr_sum
      
    # This condition is to
    # handle the case when
    # n is a prime number.
    if n >= 2:
        res *= (1 + n)
      
    return res
  
# Driver code
n = 30
print(sumofoddFactors(n))
  
# This code is contributed by "Sharad_Bhardwaj".
Output:24
Please refer complete article on Find sum of odd factors of a number for more details!