给定正整数N ,任务是检查N是否为强质数。
在数论中,强素数是大于最接近素数(即下一个和上一个素数)的算术平均值的素数。
前几个强质数是11、17、29、37、41、59、67、71,…
强素数P n可以表示为-
其中n是其在有素数的有序集合中的索引。
例子:
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.
方法:
- 如果N不是素数或它是第一个素数,即2,则打印No。
- 否则,找到最接近N的素数(左边一个,右边一个),并将它们的算术平均值存储在mean中。
- 如果N>等于,则打印是。
- 其他打印号。
下面是上述方法的实现:
C++
// C++ program to check if given number is strong prime
#include
using namespace std;
// Utility function to check
// if a number is prime or not
bool isPrime(int n)
{
// Corner cases
if (n <= 1)
return false;
if (n <= 3)
return true;
// This is checked so that we can skip
// middle five numbers in below loop
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;
}
// Function that returns true if n is a strong prime
static bool isStrongPrime(int n)
{
// If n is not a prime number or
// n is the first prime then return false
if (!isPrime(n) || n == 2)
return false;
// Initialize previous_prime to n - 1
// and next_prime to n + 1
int previous_prime = n - 1;
int next_prime = n + 1;
// Find next prime number
while (!isPrime(next_prime))
next_prime++;
// Find previous prime number
while (!isPrime(previous_prime))
previous_prime--;
// Arithmetic mean
int mean = (previous_prime + next_prime) / 2;
// If n is a strong prime
if (n > mean)
return true;
else
return false;
}
// Driver code
int main()
{
int n = 11;
if (isStrongPrime(n))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java program to check if given number is strong prime
class GFG {
// Utility function to check
// if a number is prime or not
static boolean isPrime(int n)
{
// Corner cases
if (n <= 1)
return false;
if (n <= 3)
return true;
// This is checked so that we can skip
// middle five numbers in below loop
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;
}
// Function that returns true if n is a strong prime
static boolean isStrongPrime(int n)
{
// If n is not a prime number or
// n is the first prime then return false
if (!isPrime(n) || n == 2)
return false;
// Initialize previous_prime to n - 1
// and next_prime to n + 1
int previous_prime = n - 1;
int next_prime = n + 1;
// Find next prime number
while (!isPrime(next_prime))
next_prime++;
// Find previous prime number
while (!isPrime(previous_prime))
previous_prime--;
// Arithmetic mean
int mean = (previous_prime + next_prime) / 2;
// If n is a strong prime
if (n > mean)
return true;
else
return false;
}
// Driver code
public static void main(String args[])
{
int n = 11;
if (isStrongPrime(n))
System.out.println("Yes");
else
System.out.println("No");
}
}
Python3
# Python 3 program to check if given
# number is strong prime
from math import sqrt
# Utility function to check if a
# number is prime or not
def isPrime(n):
# Corner cases
if (n <= 1):
return False
if (n <= 3):
return True
# This is checked so that we can skip
# middle five numbers in below loop
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
# Function that returns true if
# n is a strong prime
def isStrongPrime(n):
# If n is not a prime number or
# n is the first prime then return false
if (isPrime(n) == False or n == 2):
return False
# Initialize previous_prime to n - 1
# and next_prime to n + 1
previous_prime = n - 1
next_prime = n + 1
# Find next prime number
while (isPrime(next_prime) == False):
next_prime += 1
# Find previous prime number
while (isPrime(previous_prime) == False):
previous_prime -= 1
# Arithmetic mean
mean = (previous_prime + next_prime) / 2
# If n is a strong prime
if (n > mean):
return True
else:
return False
# Driver code
if __name__ == '__main__':
n = 11
if (isStrongPrime(n)):
print("Yes")
else:
print("No")
# This code is contributed by
# Sanjit_prasad
C#
// C# program to check if a given number is strong prime
using System;
class GFG {
// Utility function to check
// if a number is prime or not
static bool isPrime(int n)
{
// Corner cases
if (n <= 1)
return false;
if (n <= 3)
return true;
// This is checked so that we can skip
// middle five numbers in below loop
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;
}
// Function that returns true if n is a strong prime
static bool isStrongPrime(int n)
{
// If n is not a prime number or
// n is the first prime then return false
if (!isPrime(n) || n == 2)
return false;
// Initialize previous_prime to n - 1
// and next_prime to n + 1
int previous_prime = n - 1;
int next_prime = n + 1;
// Find next prime number
while (!isPrime(next_prime))
next_prime++;
// Find previous prime number
while (!isPrime(previous_prime))
previous_prime--;
// Arithmetic mean
int mean = (previous_prime + next_prime) / 2;
// If n is a strong prime
if (n > mean)
return true;
else
return false;
}
// Driver code
public static void Main()
{
int n = 11;
if (isStrongPrime(n))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
PHP
$mean)
return true;
else
return false;
}
// Driver code
$n = 11;
if (isStrongPrime($n))
echo ("Yes");
else
echo("No");
// This code is contributed
// by Shivi_Aggarwal
?>
Javascript
输出:
Yes