Related Articles

# Sum of all proper divisors from 1 to N

• Last Updated : 06 Jun, 2021

Given a positive integer N, the task is to find the value of where function F(x) can be defined as sum of all proper divisors of ‘x‘.
Examples:

Input: N = 4
Output:
Explanation:
Sum of all proper divisors of numbers:
F(1) = 0
F(2) = 1
F(3) = 1
F(4) = 1 + 2 = 3
Total Sum = F(1) + F(2) + F(3) + F(4) = 0 + 1 + 1 + 3 = 5
Input: N = 5
Output:
Explanation:
Sum of all proper divisors of numbers:
F(1) = 0
F(2) = 1
F(3) = 1
F(4) = 1 + 2 = 3
F(5) = 1
Total Sum = F(1) + F(2) + F(3) + F(4) + F(5) = 0 + 1 + 1 + 3 + 1 = 6

Naive approach: The idea is to find the sum of proper divisors of each number in the range [1, N] individually, and then add them to find the required sum.
Below is the implementation of the above approach:

## C++

 // C++ implementation to find sum of all// proper divisor of number up to N#include using namespace std; // Utility function to find sum of// all proper divisor of number up to Nint properDivisorSum(int n){    int sum = 0;     // Loop to iterate over all the    // numbers from 1 to N    for (int i = 1; i <= n; ++i) {         // Find all divisors of        // i and add them        for (int j = 1; j * j <= i; ++j) {            if (i % j == 0) {                if (i / j == j)                    sum += j;                else                    sum += j + i / j;            }        }         // Subtracting 'i' so that the        // number itself is not included        sum = sum - i;    }    return sum;} // Driver Codeint main(){    int n = 4;    cout << properDivisorSum(n) << endl;     n = 5;    cout << properDivisorSum(n) << endl;     return 0;}

## Java

 // Java implementation to find sum of all// proper divisor of number up to Nclass GFG {         // Utility function to find sum of    // all proper divisor of number up to N    static int properDivisorSum(int n)    {        int sum = 0;             // Loop to iterate over all the        // numbers from 1 to N        for (int i = 1; i <= n; ++i) {                 // Find all divisors of            // i and add them            for (int j = 1; j * j <= i; ++j) {                if (i % j == 0) {                    if (i / j == j)                        sum += j;                    else                        sum += j + i / j;                }            }                 // Subtracting 'i' so that the            // number itself is not included            sum = sum - i;        }        return sum;    }         // Driver Code    public static void main (String[] args)    {        int n = 4;        System.out.println(properDivisorSum(n));             n = 5;        System.out.println(properDivisorSum(n)) ;         }} // This code is contributed by Yash_R

## Python3

 # Python3 implementation to find sum of all# proper divisor of number up to N # Utility function to find sum of# all proper divisor of number up to Ndef properDivisorSum(n):     sum = 0     # Loop to iterate over all the    # numbers from 1 to N    for i in range(n+1):         # Find all divisors of        # i and add them        for j in range(1, i + 1):            if j * j > i:                break            if (i % j == 0):                if (i // j == j):                    sum += j                else:                    sum += j + i // j         # Subtracting 'i' so that the        # number itself is not included        sum = sum - i     return sum # Driver Codeif __name__ == '__main__':     n = 4    print(properDivisorSum(n))     n = 5    print(properDivisorSum(n)) # This code is contributed by mohit kumar 29

## C#

 // C# implementation to find sum of all// proper divisor of number up to Nusing System; class GFG {         // Utility function to find sum of    // all proper divisor of number up to N    static int properDivisorSum(int n)    {        int sum = 0;             // Loop to iterate over all the        // numbers from 1 to N        for (int i = 1; i <= n; ++i) {                 // Find all divisors of            // i and add them            for (int j = 1; j * j <= i; ++j) {                if (i % j == 0) {                    if (i / j == j)                        sum += j;                    else                        sum += j + i / j;                }            }                 // Subtracting 'i' so that the            // number itself is not included            sum = sum - i;        }        return sum;    }         // Driver Code    public static void Main (string[] args)    {        int n = 4;        Console.WriteLine(properDivisorSum(n));             n = 5;        Console.WriteLine(properDivisorSum(n)) ;       }} // This code is contributed by Yash_R

## Javascript

 
Output:

5
6

Time complexity: O(N * √N)
Auxiliary space: O(1)
Efficient approach: Upon observing the pattern in the function, it can be seen that “For a given number N, every number ‘x’ in the range [1, N] occurs (N/x) number of times”.
For example:

Let N = 6 => G(N) = F(1) + F(2) + F(3) + F(4) + F(5) + F(6)
x = 1 => 1 will occurs 6 times (in F(1), F(2), F(3), F(4), F(5) and F(6))
x = 2 => 2 will occurs 3 times (in F(2), F(4) and F(6))
x = 3 => 3 will occur 2 times (in F(3) and F(6))
x = 4 => 4 will occur 1 times (in F(4))
x = 5 => 5 will occur 1 times (in F(5))
x = 6 => 6 will occur 1 times (in F(6))

From above observation, it can easily be observed that number x occurs only in its multiple less than or equal to N. Therefore, we just need to find the count of such multiples, for each value of x in [1, N], and then multiply it with x. This value is then added to the final sum.
Below is the implementation of the above approach:

## C++

 // C++ implementation to find sum of all// proper divisor of numbers up to N #include using namespace std; // Utility function to find sum of// all proper divisor of number up to Nint properDivisorSum(int n){    int sum = 0;     // Loop to find the proper    // divisor of every number    // from 1 to N    for (int i = 1; i <= n; ++i)        sum += (n / i) * i;     return sum - n * (n + 1) / 2;} // Driver Codeint main(){    int n = 4;    cout << properDivisorSum(n) << endl;     n = 5;    cout << properDivisorSum(n) << endl;    return 0;}

## Java

 // Java implementation to find sum of all// proper divisor of numbers up to N  // Utility function to find sum of// all proper divisor of number up to N class GFG{    static int properDivisorSum(int n)    {        int sum = 0;        int i;        // Loop to find the proper        // divisor of every number        // from 1 to N        for (i = 1; i <= n; ++i)            sum += (n / i) * i;              return sum - n * (n + 1) / 2;    }          // Driver Code    public static void main(String []args)    {        int n = 4;        System.out.println(properDivisorSum(n));              n = 5;        System.out.println(properDivisorSum(n));             }}

## Python3

 # Python3 implementation to find sum of all# proper divisor of numbers up to N # Utility function to find sum of# all proper divisor of number up to Ndef properDivisorSum(n):         sum = 0         # Loop to find the proper    # divisor of every number    # from 1 to N    for i in range(1, n + 1):        sum += (n // i) * i             return sum - n * (n + 1) // 2  # Driver Coden = 4print(properDivisorSum(n)) n = 5print(properDivisorSum(n)) # This code is contributed by shubhamsingh10

## C#

 // C# implementation to find sum of all// proper divisor of numbers up to N   // Utility function to find sum of// all proper divisor of number up to Nusing System; class GFG{    static int properDivisorSum(int n)    {        int sum = 0;        int i;        // Loop to find the proper        // divisor of every number        // from 1 to N        for (i = 1; i <= n; ++i)            sum += (n / i) * i;               return sum - n * (n + 1) / 2;    }           // Driver Code    public static void Main(String []args)    {        int n = 4;        Console.WriteLine(properDivisorSum(n));               n = 5;        Console.WriteLine(properDivisorSum(n));              }} // This code is contributed by 29AjayKumar

## Javascript

 
Output:
5
6

Time complexity: O(N)
Auxiliary space: O(1)

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up