Open In App

Find sum of inverse of the divisors when sum of divisors and the number is given

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>

Output: 
1.44

 

Time Complexity: O(1)

Auxiliary Space: O(1)
 


Article Tags :