Given an integer **N**, the task is to find two non-negative integers **A** and **B**, such that **A ^{2} – B^{2} = 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 as4.^{2}– 3^{2}= 7

Input:N = 6

Output:-1

Explanation:

No pair of (A, B) exists that satisfies the required condition.

**Approach:**

**A**can be represented as^{2}– B^{2}**(A – B) * (A + B)**.

A

^{2}– B^{2}= (A – B) * (A + B)- Thus, for
**A**to be equal to^{2}– B^{2}**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 <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*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

**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.