Check if N is Strong Prime
Last Updated :
27 Aug, 2022
Given a positive integer N, the task is to check if N is a strong prime or not.
In number theory, a strong prime is a prime number that is greater than the arithmetic mean of nearest prime numbers i.e next and previous prime numbers.
First few strong prime numbers are 11, 17, 29, 37, 41, 59, 67, 71, …
A strong prime Pn can be represented as-
where n is its index in the ordered set of prime numbers.
Examples:
Input: N = 11
Output: Yes
11 is 5th prime number, the arithmetic mean of 4th and 6th prime number i.e. 7 and 13 is 10.
11 is greater than 10 so 11 is a strong prime.
Input: N = 13
Output: No
13 is 6th prime number, the arithmetic mean of 5th (11) and 7th (17) is (11 + 17) / 2 = 14.
13 is smaller than 14 so 13 is not a strong prime.
Approach:
- If N is not a prime number or it is the first prime number i.e. 2 then print No.
- Else find the primes closest to N (one on the left and one on the right) and store their arithmetic mean in mean.
- If N > mean then print Yes.
- Else print No.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool isPrime( int n)
{
if (n <= 1)
return false ;
if (n <= 3)
return true ;
if (n % 2 == 0 || n % 3 == 0)
return false ;
for ( int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false ;
return true ;
}
static bool isStrongPrime( int n)
{
if (!isPrime(n) || n == 2)
return false ;
int previous_prime = n - 1;
int next_prime = n + 1;
while (!isPrime(next_prime))
next_prime++;
while (!isPrime(previous_prime))
previous_prime--;
int mean = (previous_prime + next_prime) / 2;
if (n > mean)
return true ;
else
return false ;
}
int main()
{
int n = 11;
if (isStrongPrime(n))
cout << "Yes" ;
else
cout << "No" ;
return 0;
}
|
Java
class GFG {
static boolean isPrime( int n)
{
if (n <= 1 )
return false ;
if (n <= 3 )
return true ;
if (n % 2 == 0 || n % 3 == 0 )
return false ;
for ( int i = 5 ; i * i <= n; i = i + 6 )
if (n % i == 0 || n % (i + 2 ) == 0 )
return false ;
return true ;
}
static boolean isStrongPrime( int n)
{
if (!isPrime(n) || n == 2 )
return false ;
int previous_prime = n - 1 ;
int next_prime = n + 1 ;
while (!isPrime(next_prime))
next_prime++;
while (!isPrime(previous_prime))
previous_prime--;
int mean = (previous_prime + next_prime) / 2 ;
if (n > mean)
return true ;
else
return false ;
}
public static void main(String args[])
{
int n = 11 ;
if (isStrongPrime(n))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python3
from math import sqrt
def isPrime(n):
if (n < = 1 ):
return False
if (n < = 3 ):
return True
if (n % 2 = = 0 or n % 3 = = 0 ):
return False
k = int (sqrt(n)) + 1
for i in range ( 5 , k, 6 ):
if (n % i = = 0 or n % (i + 2 ) = = 0 ):
return False
return True
def isStrongPrime(n):
if (isPrime(n) = = False or n = = 2 ):
return False
previous_prime = n - 1
next_prime = n + 1
while (isPrime(next_prime) = = False ):
next_prime + = 1
while (isPrime(previous_prime) = = False ):
previous_prime - = 1
mean = (previous_prime + next_prime) / 2
if (n > mean):
return True
else :
return False
if __name__ = = '__main__' :
n = 11
if (isStrongPrime(n)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG {
static bool isPrime( int n)
{
if (n <= 1)
return false ;
if (n <= 3)
return true ;
if (n % 2 == 0 || n % 3 == 0)
return false ;
for ( int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false ;
return true ;
}
static bool isStrongPrime( int n)
{
if (!isPrime(n) || n == 2)
return false ;
int previous_prime = n - 1;
int next_prime = n + 1;
while (!isPrime(next_prime))
next_prime++;
while (!isPrime(previous_prime))
previous_prime--;
int mean = (previous_prime + next_prime) / 2;
if (n > mean)
return true ;
else
return false ;
}
public static void Main()
{
int n = 11;
if (isStrongPrime(n))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
}
|
PHP
<?php
function isPrime( $n )
{
if ( $n <= 1)
return false;
if ( $n <= 3)
return true;
if ( $n % 2 == 0 || $n % 3 == 0)
return false;
for ( $i = 5; $i * $i <= $n ;
$i = $i + 6)
if ( $n % $i == 0 ||
$n % ( $i + 2) == 0)
return false;
return true;
}
function isStrongPrime( $n )
{
if (!isPrime( $n ) || $n == 2)
return false;
$previous_prime = $n - 1;
$next_prime = $n + 1;
while (!isPrime( $next_prime ))
$next_prime ++;
while (!isPrime( $previous_prime ))
$previous_prime --;
$mean = ( $previous_prime +
$next_prime ) / 2;
if ( $n > $mean )
return true;
else
return false;
}
$n = 11;
if (isStrongPrime( $n ))
echo ( "Yes" );
else
echo ( "No" );
?>
|
Javascript
<script>
function isPrime(n)
{
if (n <= 1)
return false ;
if (n <= 3)
return true ;
if (n % 2 == 0 || n % 3 == 0)
return false ;
for (let i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false ;
return true ;
}
function isStrongPrime(n)
{
if (!isPrime(n) || n == 2)
return false ;
let previous_prime = n - 1;
let next_prime = n + 1;
while (!isPrime(next_prime))
next_prime++;
while (!isPrime(previous_prime))
previous_prime--;
let mean = parseInt((previous_prime +
next_prime) / 2);
if (n > mean)
return true ;
else
return false ;
}
let n = 11;
if (isStrongPrime(n))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time Complexity: O(n1/2)
Auxiliary Space: O(1), since no extra space has been taken.
Share your thoughts in the comments
Please Login to comment...