Sum of all proper divisors of a natural number

1.7

Given a natural number, calculate sum of all its proper divisors. A proper divisor of a natural number is the divisor that is strictly less than the number.

For example, number 20 has 5 proper divisors: 1, 2, 4, 5, 10, and the divisor summation is: 1 + 2 + 4 + 5 + 10 = 22.

Examples:

Input : num = 10
Output: 8
// proper divisors 1 + 2 + 5 = 8 

Input : num = 36
Output: 55
// proper divisors 1 + 2 + 3 + 4 + 6 + 9 + 12 + 18 = 55 

This problem has very simple solution, we all know that for any number ‘num’ all its divisors are always less than and equal to ‘num/2’ and all prime factors are always less than and equal to sqrt(num). So we iterate through ‘i’ till i<=sqrt(num) and for any 'i' if it divides 'num' , then we get two divisors 'i' and 'num/i' , continuously add these divisors but for some numbers divisors 'i' and 'num/i' will same in this case just add only one divisor , e.g; num=36 so for i=6 we will get (num/i)=6 , that's why we will at 6 in the summation only once. Finally we add one as one is divisor of all natural numbers.

C++

// C++ program to find sum of all divisors of
// a natural number
#include<bits/stdc++.h>
using namespace std;

// Function to calculate sum of all proper divisors
// num --> given natural number
int divSum(int num)
{
    // Final result of summation of divisors
    int result = 0;

    // find all divisors which divides 'num'
    for (int i=2; i<=sqrt(num); i++)
    {
        // if 'i' is divisor of 'num'
        if (num%i==0)
        {
            // if both divisors are same then add
            // it only once else add both
            if (i==(num/i))
                result += i;
            else
                result += (i + num/i);
        }
    }

    // Add 1 to the result as 1 is also a divisor
    return (result + 1);
}

// Driver program to run the case
int main()
{
    int num = 36;
    cout << divSum(num);
    return 0;
}

Java

// JAVA program to find sum of all divisors
// of a natural number
import java.math.*;

class GFG {
    
    // Function to calculate sum of all proper
    // divisors num --> given natural number
    static int divSum(int num)
    {
        // Final result of summation of divisors
        int result = 0;
     
        // find all divisors which divides 'num'
        for (int i = 2; i <= Math.sqrt(num); i++)
        {
            // if 'i' is divisor of 'num'
            if (num % i == 0)
            {
                // if both divisors are same then 
                // add it only once else add both
                if (i == (num / i))
                    result += i;
                else
                    result += (i + num / i);
            }
        }
     
        // Add 1 to the result as 1 is also
        // a divisor
        return (result + 1);
    }
     
    // Driver program to run the case
    public static void main(String[] args)
    {
        int num = 36;
        System.out.println(divSum(num));
    }
}

/*This code is contributed by Nikita Tiwari*/

Python

# PYTHON program to find sum of all 
# divisors of a natural number
import math
    
# Function to calculate sum of all proper
# divisors num --> given natural number
def divSum(num) :
    
    # Final result of summation of divisors
    result = 0
    
    # find all divisors which divides 'num'
    i = 2
    while i<= (math.sqrt(num)) :
      
        # if 'i' is divisor of 'num'
        if (num % i == 0) :
      
            # if both divisors are same then
            # add it only once else add both
            if (i == (num / i)) :
                result = result + i;
            else :
                result = result +  (i + num/i);
        i = i + 1
        
    # Add 1 to the result as 1 is also 
    # a divisor
    return (result + 1);
 
# Driver program to run the case
num = 36
print (divSum(num))

# This code is contributed by Nikita Tiwari


Output:

55

If you have another approach to solve this problem then please share.
This article is contributed by Shashank Mishra ( Gullu ). If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

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

Recommended Posts:



1.7 Average Difficulty : 1.7/5.0
Based on 7 vote(s)










Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.