Skip to content
Related Articles

Related Articles

Improve Article

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 \sum_{x=1}^{x=N} F(x)     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 <bits/stdc++.h>
using namespace std;
 
// Utility function to find sum of
// all proper divisor of number up to N
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
int 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 N
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;
        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 N
def 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 Code
if __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 N
using 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




<script>
 
//Javascript 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 N
function properDivisorSum(n)
{
    let sum = 0;
 
    // Loop to iterate over all the
    // numbers from 1 to N
    for (let i = 1; i <= n; ++i) {
 
        // Find all divisors of
        // i and add them
        for (let 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
  
    let n = 4;
    document.write(properDivisorSum(n) + "<br>");
 
    n = 5;
    document.write(properDivisorSum(n) + "<br>");
 
     
// This code is contributed by Mayank Tyagi
     
</script>
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 <bits/stdc++.h>
using namespace std;
 
// Utility function to find sum of
// all proper divisor of number up to N
int 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 Code
int 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 N
def 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 Code
n = 4
print(properDivisorSum(n))
 
n = 5
print(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 N
using 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




<script>
 
// Javascript 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
function properDivisorSum(n)
{
    var sum = 0;
 
    // Loop to find the proper
    // divisor of every number
    // from 1 to N
    for (var i = 1; i <= n; ++i)
        sum += parseInt(n / i) * i;
 
    return sum - n * ((n + 1) / 2);
}
 
// Driver Code
var n = 4;
document.write(properDivisorSum(n)+"<br>");
n = 5;
document.write(properDivisorSum(n)+"<br>");
 
// This code is contributed by rutvik_56.
</script>
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
Recommended Articles
Page :