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 **d _{1}, d_{2}, …, d_{K}**. It is given that

**d**

_{1}+ d_{2}+ … + d_{K}= SumThe task is to calculate

**(1 / d**.

_{1}) + (1 / d_{2}) + … + (1 / d_{K})Multiply and divide the above equation by

**N**. The equation becomes

**[(N / d**

_{1}) + (N / d_{2}) + … + (N / d_{K})] / NNow it is easy to see that **N / d _{i}** would represent some 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; ` `} ` |

*chevron_right*

*filter_none*

## 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. ` |

*chevron_right*

*filter_none*

## 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 ` `N ` `=` `9` `; ` `Sum` `=` `13` `; ` `print` `SumofInverseDivisors(N, ` `Sum` `); ` ` ` `# This code is contributed by CrazyPro ` |

*chevron_right*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

**Output:**

1.44

**Time Complexity:** 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.