C Program for Find sum of odd factors of a number - GeeksforGeeks

06 Oct, 2021
Given a number n, the task is to find the odd factor sum.Examples: 
Input : n = 30
Output : 24
Odd dividers sum 1 + 3 + 5 + 15 = 24 

Input : 18
Output : 13
Odd dividers sum 1 + 3 + 9 = 13
Let p1, p2, ... pk be prime factors of n. Let a1, a2, .. ak be highest powers of p1, p2, .. pk respectively that divide n, i.e., we can write n as n = (p1a1)*(p2a2)* ... (pkak).  
Sum of divisors = (1 + p1 + p12 ... p1a1) * 
                  (1 + p2 + p22 ... p2a2) *
                  .............................................
                  (1 + pk + pk2 ... pkak) 
To find sum of odd factors, we simply need to ignore even factors and their powers. For example, consider n = 18. It can be written as 2132 and sun of all factors is (1)*(1 + 2)*(1 + 3 + 32). Sum of odd factors (1)*(1+3+32) = 13.To remove all even factors, we repeatedly divide n while it is divisible by 2. After this step, we only get odd factors. Note that 2 is the only even prime.  
C++
Java
Python 3
C#
PHP
Javascript
// Formula based CPP program// to find sum of all// divisors of n.#include <bits/stdc++.h>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 codeint main(){    int n = 30;    cout << sumofoddFactors(n);    return 0;}
// Formula based Java program// to find sum of all// divisors of n.import java.io.*; 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) {        int n = 30;        System.out.println ( sumofoddFactors(n));    }} // This code is contributed by vt_m.
# Formula based Python 3 program# to find sum of all  divisors of n # Returns sum of all factors of nimport mathdef sumofoddFactors(n):     # Traversing through all prime factors    res = 1     # ignore even factors by    # removing all powers of 2        while (n % 2) == 0 :        n = n / 2    i=3    while i <= math.sqrt(n):             # 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 coden = 30print(int(sumofoddFactors(n))) # This code is contributed# by Azkia Anam.
// Formula based Java 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.WriteLine( sumofoddFactors(n));    }} // This code is contributed by vt_m.
<?php// Formula based PHP program to find// sum of all divisors of n. // Returns sum of all factors of n.function sumofoddFactors($n){    // Traversing through all    // prime factors.    $res = 1;     // ignore even factors by removing    // all powers of 2    while ($n % 2 == 0)        $n = $n / 2;     for ($i = 3; $i <= sqrt($n); $i++)    {         // While i divides n, print        // i and divide n        $count = 0;        $curr_sum = 1 ;        $curr_term = 1;        while ($n % $i == 0)        {            $count++;             $n = (int) $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;echo sumofoddFactors($n); // This code is contributed// by Sach_Code?>
<script>// Formula based javascript program// to find sum of all// divisors of n.     // Returns sum of all factors of n.    function sumofoddFactors(n)    {             // Traversing through all        // prime factors.        var res = 1;         // ignore even factors by        // removing all powers of        // 2        while (n % 2 == 0)            n = n / 2;         for (var i = 3; i <= Math.sqrt(n); i++) {             // While i divides n, print            // i and divide n            var count = 0, curr_sum = 1;            var 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             var n = 30;        document.write(sumofoddFactors(n)); // This code is contributed by gauravrajput1</script>
Output: 
24
Time Complexity: O(n1/2)
Auxiliary Space: O(1)Please refer complete article on Find sum of odd factors of a number for more details!
Sach_Code
souravmahato348
GauravRajput1
C Programs
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
C Program to read contents of Whole File
Header files in C/C++ and its uses
How to return multiple values from a function in C or C++?
How to Append a Character to a String in C
Program to print ASCII Value of a character
C program to sort an array in ascending order
time() function in C
Flex (Fast Lexical Analyzer Generator )
C Program to Swap two Numbers
Program to find Prime Numbers Between given Interval