Given a positive integer N, the task is to check if N is a weak Prime or not.
In number theory, a weak prime is a prime number that is less than the arithmetic mean of nearest prime numbers i.e next and previous prime numbers.
First few weak prime numbers are 3, 7, 13, 19, 23, 31, 43, 47, 61, …
A weak prime Pn can be represented as-

where n is its index in the ordered set of prime numbers.
Examples:
Input: N = 13
Output: Yes
13 is 6th prime number, the arithmetic mean of 5th and 7th prime number i.e. 11 and 17 is 14.
13 is less than 14 so 13 is a weak prime.
Input: N = 11
Output: No
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++14
#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 ;
}
bool isWeakPrime( 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 = 13;
if (isWeakPrime(n))
cout << "Yes" ;
else
cout << "No" ;
return 0;
}
|
Java
import java.util.*;
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 isWeakPrime( 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 = 13 ;
if (isWeakPrime(n))
System.out.print( "Yes" );
else
System.out.print( "No" );
}
}
|
Python3
def isPrime(n):
if (n < = 1 ):
return False
if (n < = 3 ):
return True
if (n % 2 = = 0 or n % 3 = = 0 ):
return False
i = 5
while (i * i < = n):
if (n % i = = 0 or n % (i + 2 ) = = 0 ):
return False
i = i + 6
return True
def isWeakPrime(n):
global next_prime, previous_prime
if ( not isPrime(n) or n = = 2 ):
return False
previous_prime = n - 1
next_prime = n + 1
while ( not isPrime(next_prime)):
next_prime + = 1
while ( not isPrime(previous_prime)):
previous_prime - = 1
mean = (previous_prime + next_prime) / / 2
if (n < mean):
return True
else :
return False
if __name__ = = '__main__' :
n = 13
if (isWeakPrime(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 isWeakPrime( 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 = 13;
if (isWeakPrime(n))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "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 isWeakPrime(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 = (previous_prime +
next_prime) / 2;
if (n < mean)
return true ;
else
return false ;
}
let n = 13;
if (isWeakPrime(n))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time complexity: O(sqrt(n))
Auxiliary space: O(1)