Related Articles

Related Articles

Find two numbers such that difference of their squares equal to N
  • Difficulty Level : Basic
  • Last Updated : 15 Jun, 2020

Given an integer N, the task is to find two non-negative integers A and B, such that A2 – B2 = N. If no such integers exist, then print -1.

Examples:

Input: N = 7
Output: 4 3
Explanation:
The two integers 4 and 3 can be represented as 42 – 32 = 7.

Input: N = 6
Output: -1
Explanation:
No pair of (A, B) exists that satisfies the required condition.

Approach:



  • A2 – B2 can be represented as (A – B) * (A + B).

    A2 – B2 = (A – B) * (A + B)

  • Thus, for A2 – B2 to be equal to N, both (A + B) and (A – B) should be divisors of N.
  • Considering A + B and A – B to be equal to C and D respectively, then C and D must be divisors of N such that C <= D and C and D should be of same parity.
  • Hence, in order to solve this problem, we just need to find any pair C and D satisfying the above condition. If no such C & D exists, then the print -1.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ Program to find two numbers
// with difference of their
// squares equal to N
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to check and print
// the required two positive integers
void solve(int n)
{
  
    // Iterate till sqrt(n) to find
    // factors of N
    for (int x = 1; x <= sqrt(n); x++) {
  
        // Check if x is one
        // of the factors of N
        if (n % x == 0) {
  
            // Store the factor
            int small = x;
  
            // Compute the other factor
            int big = n / x;
  
            // Check if the two factors
            // are of the same parity
            if (small % 2 == big % 2) {
  
                // Compute a and b
                int a = (small + big) / 2;
                int b = (big - small) / 2;
  
                cout << a << " "
                     << b << endl;
                return;
            }
        }
    }
  
    // If no pair exists
    cout << -1 << endl;
}
  
// Driver Code
int main()
{
    int n = 7;
  
    solve(n);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java Program to find two numbers
// with difference of their
// squares equal to N
import java.util.*;
class GFG{
  
// Function to check and print
// the required two positive integers
static void solve(int n)
{
  
    // Iterate till sqrt(n) to find
    // factors of N
    for (int x = 1; x <= Math.sqrt(n); x++) 
    {
  
        // Check if x is one
        // of the factors of N
        if (n % x == 0
        {
  
            // Store the factor
            int small = x;
  
            // Compute the other factor
            int big = n / x;
  
            // Check if the two factors
            // are of the same parity
            if (small % 2 == big % 2
            {
  
                // Compute a and b
                int a = (small + big) / 2;
                int b = (big - small) / 2;
  
                System.out.print(a + " " + b);
                return;
            }
        }
    }
  
    // If no pair exists
    System.out.print(-1);
}
  
// Driver Code
public static void main(String args[])
{
    int n = 7;
  
    solve(n);
}
}
  
// This code is contributed by Code_Mech

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 Program to find two numbers 
# with difference of their 
# squares equal to N 
from math import sqrt
  
# Function to check and print 
# the required two positive integers 
def solve(n) :
      
    # Iterate till sqrt(n) to find
    # factors of N
    for x in range(1, int(sqrt(n)) + 1) :
          
        # Check if x is one
        # of the factors of N
        if (n % x == 0) :
              
            # Store the factor 
            small = x;
              
            # Compute the other factor
            big = n // x;
              
            # Check if the two factors
            # are of the same parity
            if (small % 2 == big % 2) :
                  
                # Compute a and b
                a = (small + big) // 2;
                b = (big - small) // 2;
                print(a, b) ;
                return;
                  
    # If no pair exists
    print(-1); 
  
# Driver Code
if __name__ == "__main__" :
    n = 7;
    solve(n); 
  
# This code is contributed by AnkitRai01

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# Program to find two numbers
// with difference of their
// squares equal to N
using System;
class GFG{
  
// Function to check and print
// the required two positive integers
static void solve(int n)
{
  
    // Iterate till sqrt(n) to find
    // factors of N
    for (int x = 1; x <= Math.Sqrt(n); x++) 
    {
  
        // Check if x is one
        // of the factors of N
        if (n % x == 0) 
        {
  
            // Store the factor
            int small = x;
  
            // Compute the other factor
            int big = n / x;
  
            // Check if the two factors
            // are of the same parity
            if (small % 2 == big % 2) 
            {
  
                // Compute a and b
                int a = (small + big) / 2;
                int b = (big - small) / 2;
  
                Console.WriteLine(a + " " + b);
                return;
            }
        }
    }
  
    // If no pair exists
    Console.WriteLine(-1);
}
  
// Driver Code
public static void Main()
{
    int n = 7;
  
    solve(n);
}
}
  
// This code is contributed by Code_Mech

chevron_right


Output:

4 3

Time Complexity: O(sqrt(N))
Auxilary 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
Recommended Articles
Page :