📜  求一个数奇数之和的程序

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

求一个数奇数之和的程序

给定一个数字 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 是唯一的偶素数。

C++
// Formula based Java program
// to find sum of all divisors
// of n.
#include 
#include 
using namespace std;
 
// Returns sum of all
// factors of n.
int sumofoddFactors(int n)
{
    // Traversing through
    // all prime factors.
    int res = 1;
 
    // ignore even factors by
    // removing all powers
    // of 2
    while (n % 2 == 0)
        n = n / 2;
 
    for (int i = 3;
             i <= sqrt(n); i++)
    {
 
        // While i divides n,
        // print i and divide n
        int count = 0, curr_sum = 1;
        int curr_term = 1;
        while (n % i == 0)
        {
            count++;
            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
int main()
{
    int n = 30;
    cout << sumofoddFactors(n);
    return 0;
}
// This code is contributed by
// Manish Shaw(manishshaw1)


Java
// Formula based Java program
// to find sum of all divisors
// of n.
import java.io.*;
import java.math.*;
 
class GFG {
     
    // Returns sum of all
    // factors of n.
    static int sumofoddFactors(int n)
    {
        // Traversing through
        // all prime factors.
        int res = 1;
     
        // ignore even factors by
        // removing all powers
        // of 2
        while (n % 2 == 0)
            n = n / 2;
     
        for (int i = 3; i <= Math.sqrt(n); i++)
        {
     
            // While i divides n, print i
            // and divide n
            int count = 0, curr_sum = 1;
            int curr_term = 1;
            while (n % i == 0)
            {
                count++;
     
                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
    public static void main(String args[])
                        throws IOException
    {
        int n = 30;
        System.out.println(sumofoddFactors(n));
    }
}
 
/* This code is contributed by Nikita Tiwari.*/


Python3
# Formula based Python 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
    # removing all powers
    # of 2
    while (n % 2 == 0) :
        n = int(n / 2)
 
    for i in range(3, int(math.sqrt(n)) + 1) :
         
        # While i divides n,
        # pri and divide n
        count = 0
        curr_sum = 1
        curr_term = 1
        while (n % i == 0) :
         
            count = count + 1
            n = int(n / i)
            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 = 30
print (sumofoddFactors(n))
 
# This code is contributed by
# Manish Shaw(manishshaw1)


C#
// Formula based C# program to find sum
// of all divisors of n.
using System;
 
class GFG {
     
    // Returns sum of all factors of n.
    static int sumofoddFactors(int n)
    {
         
        // Traversing through
        // all prime factors.
        int res = 1;
     
        // ignore even factors by
        // removing all powers
        // of 2
        while (n % 2 == 0)
            n = n / 2;
     
        for (int i = 3; i <= Math.Sqrt(n); i++)
        {
     
            // While i divides n, print i
            // and divide n
            int count = 0, curr_sum = 1;
            int curr_term = 1;
            while (n % i == 0)
            {
                count++;
     
                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
    public static void Main()
                         
    {
        int n = 30;
         
        Console.Write(sumofoddFactors(n));
    }
 
}
 
// This code is contributed by nitin mittal.


PHP
= 2)
        $res *= (1 + $n);
 
    return $res;
}
 
// Driver code
$n = 30;
echo (sumofoddFactors($n));
 
// This code is contributed by
// Manish Shaw(manishshaw1)
?>


Javascript


输出:

24

有关详细信息,请参阅有关查找数字的奇数和的完整文章!