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++ 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 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 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# 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 |
<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> |
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.
#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 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));
}
} |
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))
|
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));
}
} |
// 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)); |
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.