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

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 = 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ Program for the above approach
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Output: 

3

Time Complexity: O(logN)
Auxiliary Space: 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.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.