C Program for Find sum of odd factors of a number

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 code
int main()
{
    int n = 30;
    cout << sumofoddFactors(n);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


Article Link

Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Formula based Python 3 program 
# to find sum of all  divisors of n
  
# Returns sum of all factors of n
import math
def 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 code
n = 30
print(int(sumofoddFactors(n)))
  
# This code is contributed
# by Azkia Anam.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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
?>

chevron_right



Output:

24

Please refer complete article on Find sum of odd factors of a number for more details!



My Personal Notes arrow_drop_up

Improved By : Sach_Code

Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.