Check n^2 – m^2 is prime or not
Last Updated :
25 Sep, 2023
Given two integers n and m. Check n^2 – m^2 is prime or not. n and m can be very large.
Examples:
Input : n = 6, m = 5
Output : YES
Input : n = 16, m = 13
Output : NO
A simple solution is to first compute n^2 – m^2, then check if it is prime or not. n^2 – m^2 might be very large – it might not even fit into 64-bit integer. Checking primality for it certainly cannot be performed naively.
A better solution is to express n^2 – m^2 as (n-m)(n+m). This is prime if and only if n-m = 1 and n+m is a prime.
C++
#include <bits/stdc++.h>
using namespace std;
bool isprime( int x)
{
for ( int i = 2; i * i <= x; i++)
if (x % i == 0)
return false ;
return true ;
}
bool isNSqMinusnMSqPrime( int m, int n)
{
if (n - m == 1 and isprime(m + n))
return true ;
else
return false ;
}
int main()
{
int m = 13, n = 16;
if (isNSqMinusnMSqPrime(m, n))
cout << "YES" ;
else
cout << "NO" ;
return 0;
}
|
C
#include <stdio.h>
int isprime( int x)
{
for ( int i = 2; i * i <= x; i++)
if (x % i == 0)
return 0;
return 1;
}
int isNSqMinusnMSqPrime( int m, int n)
{
if (n - m == 1 && isprime(m + n))
return 1;
else
return 0;
}
int main()
{
int m = 13, n = 16;
if (isNSqMinusnMSqPrime(m, n))
printf ( "YES" );
else
printf ( "NO" );
return 0;
}
|
Java
class GFG
{
static boolean isprime( int x)
{
for ( int i = 2 ; i * i <= x; i++)
if (x % i == 0 )
return false ;
return true ;
}
static boolean isNSqMinusnMSqPrime( int m, int n)
{
if (n - m == 1 && isprime(m + n))
return true ;
else
return false ;
}
public static void main(String [] args)
{
int m = 13 , n = 16 ;
if (isNSqMinusnMSqPrime(m, n))
System.out.println( "YES" );
else
System.out.println( "NO" );
}
}
|
Python3
def isprime(x):
for i in range ( 2 , math.sqrt(x)):
if (x % i = = 0 ) :
return False ;
return True ;
def isNSqMinusnMSqPrime( m, n):
if (n - m = = 1 and isprime(m + n)):
return True ;
else :
return False ;
m = 13 ;
n = 16 ;
if (isNSqMinusnMSqPrime(m, n)) :
print ( "YES" );
else :
print ( "NO" );
|
C#
using System;
class GFG
{
static bool isprime( int x)
{
for ( int i = 2; i * i <= x; i++)
if (x % i == 0)
return false ;
return true ;
}
static bool isNSqMinusnMSqPrime( int m,
int n)
{
if (n - m == 1 && isprime(m + n))
return true ;
else
return false ;
}
public static void Main()
{
int m = 13, n = 16;
if (isNSqMinusnMSqPrime(m, n))
Console.Write( "YES" );
else
Console.Write( "NO" );
}
}
|
Javascript
<script>
function isprime(x)
{
for ( var i = 2; i * i <= x; i++)
if (x % i == 0)
return false ;
return true ;
}
function isNSqMinusnMSqPrime(m, n)
{
if (n - m == 1 && isprime(m + n))
return true ;
else
return false ;
}
var m = 13, n = 16;
if (isNSqMinusnMSqPrime(m, n))
document.write( "YES" );
else
document.write( "NO" );
</script>
|
PHP
<?php
function isprime( $x )
{
for ( $i = 2; $i * $i <= $x ; $i ++)
if ( $x % i == 0)
return false;
return true;
}
function isNSqMinusnMSqPrime( $m , $n )
{
if ( $n - $m == 1 and isprime( $m + $n ))
return true;
else
return false;
}
$m = 13; $n = 16;
if (isNSqMinusnMSqPrime( $m , $n ))
echo "YES" ;
else
echo "NO" ;
?>
|
Time Complexity: O(sqrt(n+m))
Auxiliary Space: O(1)
Approach:
The approach is to use a property of prime numbers which states that if a number p is prime, then p^2 – 1 is divisible by 24. So, if n^2 – m^2 is prime, then it should satisfy this property as well.
We can check if n^2 – m^2 is divisible by 24 or not. If it is, then it can be a prime number, otherwise, it is definitely not a prime number.
So, in the code, we first calculate n^2 – m^2 and then check if it is less than or equal to 1. If it is, then it is not a prime number. Otherwise, we check if it is divisible by 24 by checking if (n^2 – m^2 + 1) is divisible by 24 or not. If it is, then we return true, else we return false.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool isNSqMinusnMSqPrime( int m, int n)
{
int num = n*n - m*m;
if (num <= 1)
return false ;
if ((num+1)%24 == 0)
return true ;
return false ;
}
int main()
{
int m = 13, n = 16;
if (isNSqMinusnMSqPrime(m, n))
cout << "YES" ;
else
cout << "NO" ;
return 0;
}
|
Java
import java.util.*;
public
class Main {
static boolean isNSqMinusnMSqPrime( int m, int n)
{
int num = n * n - m * m;
if (num <= 1 )
return false ;
if ((num + 1 ) % 24 == 0 )
return true ;
return false ;
}
public
static void main(String[] args)
{
int m = 13 , n = 16 ;
if (isNSqMinusnMSqPrime(m, n))
System.out.println( "YES" );
else
System.out.println( "NO" );
}
}
|
Python3
def isNSqMinusnMSqPrime(m, n):
num = n * n - m * m
if num < = 1 :
return False
if (num + 1 ) % 24 = = 0 :
return True
return False
if __name__ = = '__main__' :
m, n = 13 , 16
if isNSqMinusnMSqPrime(m, n):
print ( "YES" )
else :
print ( "NO" )
|
C#
using System;
class Program
{
static bool IsNSqMinusnMSqPrime( int m, int n)
{
int num = n * n - m * m;
if (num <= 1)
return false ;
if ((num + 1) % 24 == 0)
return true ;
return false ;
}
static void Main()
{
int m = 13, n = 16;
if (IsNSqMinusnMSqPrime(m, n))
Console.WriteLine( "YES" );
else
Console.WriteLine( "NO" );
}
}
|
Javascript
function isNSqMinusnMSqPrime(m, n) {
var num = n * n - m * m;
if (num <= 1) {
return false ;
}
if ((num + 1) % 24 == 0) {
return true ;
}
return false ;
}
var m = 13,
n = 16;
if (isNSqMinusnMSqPrime(m, n)) {
console.log( "YES" );
} else {
console.log( "NO" );
}
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...