# Count of Ordered Pairs (X, Y) satisfying the Equation 1/X + 1/Y = 1/N

• Difficulty Level : Expert
• Last Updated : 13 Jun, 2022

Given a positive integer N, the task is to find the number of ordered pairs (X, Y) where both X and Y are positive integers, such that they satisfy the equation 1/X + 1/Y = 1/N.

Examples:

Input: N = 5
Output:
Explanation: Only 3 pairs {(30,6), (10,10), (6,30)} satisfy the given equation.

Input: N = 360
Output: 105

Approach:
Follow the steps to solve the problem:

• Solve for X using the given equation.

1/X + 1/Y = 1/N
=> 1/X = 1/N – 1/Y
=> 1/X = (Y – N) / NY
=> X = NY / (Y – N)

X = [ NY / (Y – N) ] * (1)

=> X = [ NY / (Y – N) ] * [1 – N/Y + N/Y]

=> X = [ NY / (Y – N) ] * [(Y- N)/Y + N/Y]

=> X = N + N2 / (Y – N)

• Therefore, it can be observed that, to have a positive integer X, the remainder when N2 is divided by (Y – N) needs to be 0.
• It can be observed that the minimum value of Y can be N + 1 (so that denominator Y – N > 0) and the maximum value of Y can be N2 + N so that N2/(Y – N) remains a positive integer ≥ 1.
• Then iterate over the maximum and minimum possible values of Y, and for each value of Y for which N2 % (Y – N) == 0, increment count.
• Finally, return count as the number of ordered pairs.

Below is the implementation of the above approach:

## C++

 `// C++ Program for the above approach` `#include ` `using` `namespace` `std;`   `// Function to find number of ordered` `// positive integer pairs (x,y) such` `// that  they satisfy the equation` `void` `solve(``int` `n)` `{` `    ``// Initialize answer variable` `    ``int` `ans = 0;`   `// Iterate over all possible values of y` `    ``for` `(``int` `y = n + 1; y <= n * n + n; y++) {`   `        ``// For valid x and y,` `        ``// (n*n)%(y - n) has to be 0` `        ``if` `((n * n) % (y - n) == 0) {`   `            ``// Increment count of ordered pairs` `            ``ans += 1;` `        ``}` `    ``}`   `    ``// Print the answer` `    ``cout << ans;` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `n = 5;` `    ``// Function call` `    ``solve(n);` `    ``return` `0;` `}`

## Java

 `// Java program for the above approach` `class` `GFG{`   `// Function to find number of ordered` `// positive integer pairs (x,y) such` `// that they satisfy the equation` `static` `void` `solve(``int` `n)` `{` `    `  `    ``// Initialize answer variable` `    ``int` `ans = ``0``;`   `    ``// Iterate over all possible values of y` `    ``for``(``int` `y = n + ``1``; y <= n * n + n; y++) ` `    ``{` `        `  `        ``// For valid x and y,` `        ``// (n*n)%(y - n) has to be 0` `        ``if` `((n * n) % (y - n) == ``0``)` `        ``{` `            `  `            ``// Increment count of ordered pairs` `            ``ans += ``1``;` `        ``}` `    ``}`   `    ``// Print the answer` `    ``System.out.print(ans);` `}`   `// Driver Code` `public` `static` `void` `main(String[] args)` `{` `    ``int` `n = ``5``;` `    `  `    ``// Function call` `    ``solve(n);` `}` `}`   `// This code is contributed by Amit Katiyar `

## Python3

 `# Python3 program for the above approach `   `# Function to find number of ordered` `# positive integer pairs (x,y) such` `# that they satisfy the equation` `def` `solve(n):`   `    ``# Initialize answer variable` `    ``ans ``=` `0`   `    ``# Iterate over all possible values of y` `    ``y ``=` `n ``+` `1` `    ``while``(y <``=` `n ``*` `n ``+` `n):`   `        ``# For valid x and y,` `        ``# (n*n)%(y - n) has to be 0` `        ``if` `((n ``*` `n) ``%` `(y ``-` `n) ``=``=` `0``):` `            `  `            ``# Increment count of ordered pairs` `            ``ans ``+``=` `1`   `        ``y ``+``=` `1`   `    ``# Print the answer` `    ``print``(ans)`   `# Driver Code` `n ``=` `5`   `# Function call ` `solve(n)`   `# This code is contributed by Shivam Singh`

## C#

 `// C# program for the above approach` `using` `System;`   `class` `GFG{`   `// Function to find number of ordered` `// positive integer pairs (x,y) such` `// that they satisfy the equation` `static` `void` `solve(``int` `n)` `{` `    `  `    ``// Initialize answer variable` `    ``int` `ans = 0;`   `    ``// Iterate over all possible values of y` `    ``for``(``int` `y = n + 1; y <= n * n + n; y++) ` `    ``{` `        `  `        ``// For valid x and y,` `        ``// (n*n)%(y - n) has to be 0` `        ``if` `((n * n) % (y - n) == 0)` `        ``{` `            `  `            ``// Increment count of ordered pairs` `            ``ans += 1;` `        ``}` `    ``}`   `    ``// Print the answer` `    ``Console.Write(ans);` `}`   `// Driver Code` `public` `static` `void` `Main(String[] args)` `{` `    ``int` `n = 5;` `    `  `    ``// Function call` `    ``solve(n);` `}` `}`   `// This code is contributed by Amit Katiyar`

## Javascript

 ``

Output:

`3`

Time Complexity: O(N*N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :