Open In App

# Check whether a number can be represented as difference of two squares

Given a number N, the task is to check if this number can be represented as the difference of two perfect squares or not.

Examples:

Input: N = 3
Output: Yes
Explanation:
22 – 11 = 3

Input: N = 10
Output: No

Approach: The idea is that all the numbers can be represented as the difference of two squares except the numbers which yield the remainder of 2 when divided by 4.

Let’s visualize this by taking a few examples:

`N = 4 => 22 - 02N = 6 => Can't be expressed as 6 % 4 = 2N = 8 => 32 - 12N = 10 => Can't be expressed as 10 % 4 = 2N = 11 => 62 - 52N = 12 => 42 - 22and so on...`

Therefore, the idea is to simply check the remainder for 2 when the given number is divided by 4.

Below is the implementation of the above approach:

## C++

 `// C++ program to check whether a number``// can be represented by the difference``// of two squares` `#include ``using` `namespace` `std;` `// Function to check whether a number``// can be represented by the difference``// of two squares``bool` `difSquare(``int` `n)``{``    ``// Checking if n % 4 = 2 or not``    ``if` `(n % 4 != 2) {``        ``return` `true``;``    ``}` `    ``return` `false``;``}` `// Driver code``int` `main()``{` `    ``int` `n = 45;``    ``if` `(difSquare(n)) {``        ``cout << ``"Yes\n"``;``    ``}``    ``else` `{``        ``cout << ``"No\n"``;``    ``}``    ``return` `0;``}`

## Java

 `// Java program to check whether a number``// can be represented by the difference``// of two squares``import` `java.util.*;` `class` `GFG{` `// Function to check whether a number``// can be represented by the difference``// of two squares``static` `boolean` `difSquare(``int` `n)``{``    ` `    ``// Checking if n % 4 = 2 or not``    ``if` `(n % ``4` `!= ``2``)``    ``{``        ``return` `true``;``    ``}``    ``return` `false``;``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `n = ``45``;``    ` `    ``if` `(difSquare(n))``    ``{``        ``System.out.print(``"Yes\n"``);``    ``}``    ``else``    ``{``        ``System.out.print(``"No\n"``);``    ``}``}``}` `// This code is contributed by shivanisinghss2110`

## Python3

 `# Python3 program to check whether a number``# can be represented by the difference``# of two squares` `# Function to check whether a number``# can be represented by the difference``# of two squares``def` `difSquare(n):``    ` `    ``# Checking if n % 4 = 2 or not``    ``if` `(n ``%` `4` `!``=` `2``):``        ``return` `True``    ``return` `False` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``n ``=` `45``    ` `    ``if` `(difSquare(n)):``        ``print``(``"Yes"``)``    ``else``:``        ``print``(``"No"``)` `# This code is contributed by mohit kumar 29`

## C#

 `// C# program to check whether a number``// can be represented by the difference``// of two squares``using` `System;``class` `GFG{` `// Function to check whether a number``// can be represented by the difference``// of two squares``static` `bool` `difSquare(``int` `n)``{``    ` `    ``// Checking if n % 4 = 2 or not``    ``if` `(n % 4 != 2)``    ``{``        ``return` `true``;``    ``}``    ``return` `false``;``}` `// Driver code``public` `static` `void` `Main()``{``    ``int` `n = 45;``    ` `    ``if` `(difSquare(n))``    ``{``        ``Console.Write(``"Yes\n"``);``    ``}``    ``else``    ``{``        ``Console.Write(``"No\n"``);``    ``}``}``}` `// This code is contributed by Nidhi_biet`

## Javascript

 ``

Output

```Yes

```

Time complexity: O(1) because constant operations have been done
Auxiliary space: O(1)

Approach 2: Iterative Approach:
Here’s another approach to check whether a number can be represented by the difference of two squares:

• Iterate through all possible values of x from 0 to sqrt(n).
• For each value of x, compute y^2 = n + x^2.
• Check if y is an integer. If it is, then n can be represented as the difference of two squares, which are x^2 and y^2 – n.
• If no value of x satisfies the condition, then n cannot be represented as the difference of two squares.

Here’s the implementation of this approach:

## C++

 `#include ``using` `namespace` `std;` `bool` `difSquare(``int` `n) {``    ``for` `(``int` `x = 0; x <= ``sqrt``(n); x++) {``        ``int` `y_squared = n + x * x;``        ``int` `y = ``sqrt``(y_squared);``        ``if` `(y * y == y_squared) {``            ``return` `true``;``        ``}``    ``}``    ``return` `false``;``}` `int` `main() {``    ``int` `n = 45;``    ``if` `(difSquare(n)) {``        ``cout << ``"Yes\n"``;``    ``} ``else` `{``        ``cout << ``"No\n"``;``    ``}``    ``return` `0;``}`

## Java

 `import` `java.util.*;` `class` `Main {``    ``static` `boolean` `difSquare(``int` `n) {``        ``for` `(``int` `x = ``0``; x <= Math.sqrt(n); x++) {``            ``int` `y_squared = n + x * x;``            ``int` `y = (``int``) Math.sqrt(y_squared);``            ``if` `(y * y == y_squared) {``                ``return` `true``;``            ``}``        ``}``        ``return` `false``;``    ``}` `    ``public` `static` `void` `main(String[] args) {``        ``int` `n = ``45``;``        ``if` `(difSquare(n)) {``            ``System.out.println(``"Yes"``);``        ``} ``else` `{``            ``System.out.println(``"No"``);``        ``}``    ``}``}`

## Python3

 `import` `math` `def` `difSquare(n):``    ``for` `x ``in` `range``(``int``(math.sqrt(n))``+``1``):``        ``y_squared ``=` `n ``+` `x ``*` `x``        ``y ``=` `int``(math.sqrt(y_squared))``        ``if` `y ``*` `y ``=``=` `y_squared:``            ``return` `True``    ``return` `False` `n ``=` `45``if` `difSquare(n):``    ``print``(``"Yes"``)``else``:``    ``print``(``"No"``)`

## C#

 `using` `System;` `public` `class` `Program``{``  ``public` `static` `bool` `DifSquare(``int` `n)``  ``{``    ``for` `(``int` `x = 0; x <= Math.Sqrt(n); x++)``    ``{``      ``int` `ySquared = n + x * x;``      ``int` `y = (``int``)Math.Sqrt(ySquared);``      ``if` `(y * y == ySquared)``      ``{``        ``return` `true``;``      ``}``    ``}``    ``return` `false``;``  ``}` `  ``public` `static` `void` `Main()``  ``{``    ``int` `n = 45;``    ``if` `(DifSquare(n))``    ``{``      ``Console.WriteLine(``"Yes"``);``    ``}``    ``else``    ``{``      ``Console.WriteLine(``"No"``);``    ``}``  ``}``}`

## Javascript

 `// Function to check if a number can be represented as``// the difference of two squares``function` `difSquare(n) {``  ``// Loop through all possible values of x from 0 up to the``  ``// square root of n``  ``for` `(let x = 0; x <= Math.sqrt(n); x++) {``    ``// Calculate y^2 as n + x^2``    ``const y_squared = n + x * x;` `    ``// Calculate the square root of y_squared``    ``const y = Math.sqrt(y_squared);` `    ``// Check if y^2 is equal to y_squared, if so, we found``    ``// the difference of two squares``    ``if` `(y * y === y_squared) {``      ``return` `true``;``    ``}``  ``}` `  ``// If no difference of squares is found, return false``  ``return` `false``;``}` `// Driver Code`` ``const n = 45;` `  ``// Call the difSquare function and check the result``  ``if` `(difSquare(n)) {``    ``console.log(``"Yes"``);``  ``} ``else` `{``    ``console.log(``"No"``);``  ``}`

Output:

`Yes`

Time complexity: O(1) because constant operations have been done
Auxiliary space: O(1)