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++ 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 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 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# 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 |
<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)