Given an integer N and the sum of its divisors. The task is to find the sum of the inverse of the divisors of N.
Examples:
Input: N = 6, Sum = 12
Output: 2.00
Divisors of N are {1, 2, 3, 6}
Sum of inverse of divisors is equal to (1/1 + 1/2 + 1/3 + 1/6) = 2.0
Input: N = 9, Sum = 13
Output: 1.44
Naive Approach: Calculate all the divisors of the given integer N. Then calculate the sum of the inverse of the calculated divisors. This approach would give TLE when the value of N is large.
Time Complexity: O(sqrt(N))
Efficient Approach: Let the number N has K divisors say d1, d2, …, dK. It is given that d1 + d2 + … + dK = Sum
The task is to calculate (1 / d1) + (1 / d2) + … + (1 / dK).
Multiply and divide the above equation by N. The equation becomes [(N / d1) + (N / d2) + … + (N / dK)] / N
Now it is easy to see that N / di would represent another divisor of N for all 1 ? i ? K. The numerator is equal to the sum of the divisors. Hence, sum of inverse of the divisors is equal to Sum / N.
Below is the implementation of the above approach:
C++
// C++ implementation of above approach #include <bits/stdc++.h> using namespace std; // Function to return the // sum of inverse of divisors double SumofInverseDivisors( int N, int Sum) { // Calculating the answer double ans = ( double )(Sum)*1.0 / ( double )(N); // Return the answer return ans; } // Driver code int main() { int N = 9; int Sum = 13; // Function call cout << setprecision(2) << fixed << SumofInverseDivisors(N, Sum); return 0; } |
Java
// Java implementation of above approach import java.math.*; import java.io.*; class GFG { // Function to return the // sum of inverse of divisors static double SumofInverseDivisors( int N, int Sum) { // Calculating the answer double ans = ( double )(Sum)* 1.0 / ( double )(N); // Return the answer return ans; } // Driver code public static void main (String[] args) { int N = 9 ; int Sum = 13 ; // Function call System.out.println (SumofInverseDivisors(N, Sum)); } } // This code is contributed by jit_t. |
Python
# Python implementation of above approach # Function to return the # sum of inverse of divisors def SumofInverseDivisors( N, Sum ): # Calculating the answer ans = float ( Sum ) * 1.0 / float (N); # Return the answer return round (ans, 2 ); # Driver code if __name__ = = "__main__" : N = 9 ; Sum = 13 ; print (SumofInverseDivisors(N, Sum )) # This code is contributed by CrazyPro |
C#
// C# implementation of above approach using System; class GFG { // Function to return the // sum of inverse of divisors static double SumofInverseDivisors( int N, int Sum) { // Calculating the answer double ans = ( double )(Sum)*1.0 / ( double )(N); // Return the answer return ans; } // Driver code static public void Main () { int N = 9; int Sum = 13; // Function call Console.Write(SumofInverseDivisors(N, Sum)); } } // This code is contributed by ajit |
Javascript
<script> // JavaScript implementation of above approach // Function to return the // sum of inverse of divisors function SumofInverseDivisors(N, Sum) { // Calculating the answer let ans = (Sum)*1.0 / (N); // Return the answer return ans; } // Driver code let N = 9; let Sum = 13; // Function call document.write(SumofInverseDivisors(N, Sum).toFixed(2)); // This code is contributed by Surbhi Tyagi. </script> |
1.44
Time Complexity: O(1)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!