Open In App

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

Last Updated : 29 Nov, 2023
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.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads