Find sum of odd factors of a number

14 Jun, 2022
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
 
Prerequisite : Sum of all the factors of a numberAs discussed in above mentioned previous post, sum of factors of a number is 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
Python3
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.*;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.*/
# 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 coden = 30print(sumofoddFactors(n)) # This code is contributed by "Sharad_Bhardwaj".
// 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(String[] argc)    {        int n = 30;        Console.Write(sumofoddFactors(n));    }} /* This code is contributed by parashar...*/
<?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 = $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 nitin mittal.?>
<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.    let res = 1;     // ignore even factors by    // removing all powers of    // 2    while (n % 2 == 0)        n = n / 2;     for (let i = 3; i <= Math.sqrt(n); i++)    {         // While i divides n, print        // i and divide n        let count = 0;        let curr_sum = 1;        let 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 codelet n = 30;document.write(sumofoddFactors(n)); // This code is contributed by _saurabh_jaiswal </script>
Output : 
24
Time complexity: O(sqrt(n))
Auxiliary Space: O(1) 
parashar
nitin mittal
RahulYadav31
_saurabh_jaiswal
technophpfij
divisors
number-theory
prime-factor
Mathematical
number-theory
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Operators in C / C++
Prime Numbers
Minimum number of jumps to reach end
Find minimum number of coins that make a given value
The Knight's tour problem | Backtracking-1
Algorithm to solve Rubik's Cube
Program for Decimal to Binary Conversion
Modulo 10^9+7 (1000000007)
Modulo Operator (%) in C/C++ with Examples