Related Articles
Find sum of odd factors of a number
• Difficulty Level : Medium
• Last Updated : 04 Feb, 2020

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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Prerequisite : Sum of all the factors of a number

As 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++

 // Formula based CPP program  // to find sum of all  // divisors of n. #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; }

## 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 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".

## 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(String[] argc)     {         int n = 30;         Console.Write(sumofoddFactors(n));     } }    /* This code is contributed by parashar...*/

## PHP

 = 2)         \$res *= (1 + \$n);        return \$res; }    // Driver code \$n = 30; echo sumofoddFactors(\$n);    // This code is contributed // by nitin mittal.  ?>

Output :

24

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :