Given a positive integer N, the task is to find the sum of the product of all the integers in the range [1, N] with their count of divisors.
Examples:
Input: N = 3
Output: 11
Explanation:
Number of positive divisors of 1 is 1( i.e. 1 itself). Therefore, f(1) = 1.
Number of positive divisors of 2 is 2( i.e. 1, 2). Therefore, f(2) = 2.
Number of positive divisors of 3 is 2( i.e. 1, 3). Therefore, f(3) = 2.
So the answer is 1*f(1) + 2*f(2) + 3*f(3) = 1*1 + 2*2 + 3*2 = 11.Input: N = 4
Output: 23
Explanation:
Here f(1) = 1, f(2) = 2, f(3) = 2 and f(4) = 3. So, the answer is 1*1 + 2*2 + 3*2 + 4*3 = 23.
Naive Approach: The naive approach is to traverse from 1 to N and find the sum of all the numbers with their count of divisors.
Time Complexity: O(N*sqrt(N))
Auxiliary Space: O(1)
Efficient Approach: To optimize the above approach, the idea is to consider the total contribution each number makes to the answer. Below are the steps:
- For any number X in the range [1, N], X contributes K to the sum for each K from 1 to N such that K is a multiple of X.
- Observe that the list of these K is of form i, 2i, 3i, …, Fi where F is the number of multiples of i between 1 and N.
- Hence, to find the sum of these numbers generated above is given by
i*(1+2+3 + … F) = i*(F*(F+1))/2.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to find the sum of the // product of all the integers and // their positive divisors up to N long long sumOfFactors( int N) { long long ans = 0; // Iterate for every number // between 1 and N for ( int i = 1; i <= N; i++) { // Find the first multiple // of i between 1 and N long long frst = i; // Find the last multiple // of i between 1 and N long long last = (N / i) * i; // Find the total count of // multiple of in [1, N] long long factors = (last - frst) / i + 1; // Compute the contribution of i // using the formula long long totalContribution = (((factors) * (factors + 1)) / 2) * i; // Add the contribution // of i to the answer ans += totalContribution; } // Return the result return ans; } // Driver code int main() { // Given N int N = 3; // function call cout << sumOfFactors(N); } |
Java
// Java program for the above approach class GFG{ // Function to find the sum of the // product of all the integers and // their positive divisors up to N static int sumOfFactors( int N) { int ans = 0 ; // Iterate for every number // between 1 and N for ( int i = 1 ; i <= N; i++) { // Find the first multiple // of i between 1 and N int frst = i; // Find the last multiple // of i between 1 and N int last = (N / i) * i; // Find the total count of // multiple of in [1, N] int factors = (last - frst) / i + 1 ; // Compute the contribution of i // using the formula int totalContribution = (((factors) * (factors + 1 )) / 2 ) * i; // Add the contribution // of i to the answer ans += totalContribution; } // Return the result return ans; } // Driver code public static void main(String[] args) { // Given N int N = 3 ; // function call System.out.println(sumOfFactors(N)); } } // This code is contributed by Ritik Bansal |
Python3
# Python3 implementation of # the above approach # Function to find the sum of the # product of all the integers and # their positive divisors up to N def sumOfFactors(N): ans = 0 # Iterate for every number # between 1 and N for i in range ( 1 , N + 1 ): # Find the first multiple # of i between 1 and N frst = i # Find the last multiple # of i between 1 and N last = (N / / i) * i # Find the total count of # multiple of in [1, N] factors = (last - frst) / / i + 1 # Compute the contribution of i # using the formula totalContribution = (((factors * (factors + 1 )) / / 2 ) * i) # Add the contribution # of i to the answer ans + = totalContribution # Return the result return ans # Driver Code # Given N N = 3 # Function call print (sumOfFactors(N)) # This code is contributed by Shivam Singh |
C#
// C# program for the above approach using System; class GFG{ // Function to find the sum of the // product of all the integers and // their positive divisors up to N static int sumOfFactors( int N) { int ans = 0; // Iterate for every number // between 1 and N for ( int i = 1; i <= N; i++) { // Find the first multiple // of i between 1 and N int frst = i; // Find the last multiple // of i between 1 and N int last = (N / i) * i; // Find the total count of // multiple of in [1, N] int factors = (last - frst) / i + 1; // Compute the contribution of i // using the formula int totalContribution = (((factors) * (factors + 1)) / 2) * i; // Add the contribution // of i to the answer ans += totalContribution; } // Return the result return ans; } // Driver code public static void Main(String[] args) { // Given N int N = 3; // function call Console.WriteLine(sumOfFactors(N)); } } // This code is contributed by gauravrajput1 |
11
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.