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.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

 `// C++ Program to find two numbers ` `// with difference of their ` `// squares equal to N ` ` `  `#include ` `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 `

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 :