 Open in App
Not now

# Sum of all proper divisors of a natural number

• Difficulty Level : Easy
• Last Updated : 23 Jun, 2022

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

Recommended Practice

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``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;``    ``if``(num == 1) ``// there will be no proper divisor``      ``return` `result;``    ``// 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*/`

## Python3

 `# 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`

## C#

 `// C# program to find sum of all``// divisorsof a natural number``using` `System;` `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 Code``    ``public` `static` `void` `Main()``    ``{``        ``int` `num = 36;``        ``Console.Write(divSum(num));``    ``}``}` `// This code is contributed by Nitin Mittal.`

## PHP

 ` given natural number``function` `divSum(``\$num``)``{``    ``// Final result of``    ``// summation of divisors``    ``\$result` `= 0;` `    ``// find all divisors``    ``// which divides 'num'``    ``for` `(``\$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 Code``\$num` `= 36;``echo``(divSum(``\$num``));` `// This code is contributed by Ajit.``?>`

## Javascript

 ``

Output :

`55`

Time Complexity: O(√n)
Auxiliary Space: O(1)

Please refer below post for an optimized solution and formula.
Efficient solution for sum of all the factors of a number
This article is contributed by Aarti_Rathi and 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 review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.