Open In App

Find two numbers such that difference of their squares equal to N

Improve
Improve
Like Article
Like
Save
Share
Report

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




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


Java




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


Python3




# 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


C#




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


Javascript




<script>
// javascript Program to find two numbers
// with difference of their
// squares equal to N
 
    // Function to check and print
    // the required two positive integers
    function solve(n) {
 
        // Iterate till sqrt(n) to find
        // factors of N
        for (var x = 1; x <= Math.sqrt(n); x++) {
 
            // Check if x is one
            // of the factors of N
            if (n % x == 0) {
 
                // Store the factor
                var small = x;
 
                // Compute the other factor
                var big = n / x;
 
                // Check if the two factors
                // are of the same parity
                if (small % 2 == big % 2) {
 
                    // Compute a and b
                    var a = (small + big) / 2;
                    var b = (big - small) / 2;
 
                    document.write(a + " " + b);
                    return;
                }
            }
        }
 
        // If no pair exists
        document.write(-1);
    }
 
    // Driver Code
     
        var n = 7;
 
        solve(n);
 
// This code contributed by aashish1995
</script>


Output

4 3




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

Approach#2: Using brute force

This approach is to use two nested loops to generate all possible pairs of integers (i, j) such that i < j. We then check if the difference of their squares is equal to N. If we find a pair that satisfies this condition, we return the pair. If no such pair exists, we return -1.

Algorithm

1. Initialize a nested loop that iterates over all possible pairs of integers (i, j) such that i < j.
2. Compute the difference of their squares, (j^2 – i^2).
3. If (j^2 – i^2) is equal to N, return the pair (j, i) as a string.
4. If no pair is found that satisfies the condition, return -1.

C++




#include <iostream>
using namespace std;
 
// Function to find numbers with a square difference of N
string findNumbersWithSquareDifference(int N) {
    for (int i = 1; i < N; i++) {
        for (int j = i + 1; j <= N; j++) {
            // Check if j^2 - i^2 is equal to N
            if (j * j - i * i == N) {
                // Return the pair (j, i)
                return to_string(j) + " " + to_string(i);
            }
        }
    }
    // If no such pair is found, return -1
    return "-1";
}
 
int main() {
    int N = 7;
    // Call the function and print the result
    cout << findNumbersWithSquareDifference(N) << endl;
    return 0;
}
 
// This code is contributed by akshitaguprzj3


Java




// Java code of the above approach
public class GFG {
    public static String
    findNumbersWithSquareDifference(int N)
    {
        for (int i = 1; i < N; i++) {
            for (int j = i + 1; j <= N; j++) {
                if (j * j - i * i == N) {
                    return j + " " + i;
                }
            }
        }
        return "-1";
    }
 
    public static void main(String[] args)
    {
        int N = 7;
        System.out.println(
            findNumbersWithSquareDifference(N));
    }
}


Python3




def find_numbers_with_square_difference(N):
    for i in range(1, N):
        for j in range(i+1, N+1):
            if j**2 - i**2 == N:
                return f"{j} {i}"
    return "-1"
 
N=7
print(find_numbers_with_square_difference(N))


C#




using System;
class GFG {
    // Function to find numbers with a square difference of N
    static string FindNumbersWithSquareDifference(int N) {
        for (int i = 1; i < N; i++) {
            for (int j = i + 1; j <= N; j++) {
                // Check if j^2 - i^2 is equal to N
                if (j * j - i * i == N) {
                    // Return the pair (j, i)
                    return $"{j} {i}";
                }
            }
        }
        // If no such pair is found, return -1
        return "-1";
    }
 
    public static void Main() {
        int N = 7;
        // Call the function and print the result
        Console.WriteLine(
            FindNumbersWithSquareDifference(N));
    }
}


Javascript




// Function to find numbers with a square difference of N
function findNumbersWithSquareDifference(N) {
    for (let i = 1; i < N; i++) {
        for (let j = i + 1; j <= N; j++) {
            // Check if j^2 - i^2 is equal to N
            if (j * j - i * i === N) {
                // Return the pair (j, i)
                return j + " " + i;
            }
        }
    }
    // If no such pair is found, return -1
    return "-1";
}
 
// Driver code
const N = 7;
// Call the function and print the result
console.log(findNumbersWithSquareDifference(N));


Output

4 3




Time Complexity: O(N^2) because we use two nested loops to iterate over all possible pairs of integers from 1 to N.
Space Complexity: O(1) because we only store the variables i, j, and the return string, which do not depend on the input size N.



Last Updated : 29 Nov, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads