给定正整数N ,任务是检查N是否为平衡素数。
In number theory, a Balanced Prime is a prime number with equal-sized prime gaps above and below it, so that it is equal to the arithmetic mean of the nearest primes above and below. Or to put it algebraically, given a prime number pn, where n is its index in the ordered set of prime numbers,
First few balanced prime are 5, 53, 157, 173……
例子:
Input: N = 5
Output: Yes
5 is 3rd prime number, the arithmetic mean of 2nd and 4th prime number i.e. 3 and 7 is 5.
so 5 is a Balanced prime.
Input: N = 11
Output: No
方法:
- 如果N不是素数或它是第一个素数,即2,则打印No。
- 否则,找到最接近N的素数(左边一个,右边一个),并将它们的算术平均值存储在mean中。
- 如果N ==表示平均值,则打印Yes 。
- 其他打印号。
下面是上述方法的实现:
C++
// C++ program to check if a
// given number is Balanced 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 Balanced prime
bool isBalancedPrime(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 weak prime
if (n == mean)
return true;
else
return false;
}
// Driver code
int main()
{
int n = 53;
if (isBalancedPrime(n))
cout << "Yes";
else
cout << "No";
return 0;
}
// This code is contributed by himanshu77
Java
// Java program to check if a
// given number is Balanced 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 += 6)
if (n % i == 0 ||
n % (i + 2) == 0)
return false;
return true;
}
// Function that returns true
// if n is a Balanced prime
static boolean isBalancedPrime(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 weak prime
if (n == mean)
return true;
else
return false;
}
// Driver code
public static void main(String[] args)
{
int n = 53;
if (isBalancedPrime(n))
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed by stutipathak31jan
Python3
# Python3 program to check if a
# given number is Balanced prime
# 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
i = 5
while i * i <= n:
if (n % i == 0 or
n % (i + 2) == 0):
return False
i += 6
return True
# Function that returns true
# if n is a Balanced prime
def isBalancedPrime(n):
# If n is not a prime number
# or n is the first prime
# then return false
if not isPrime(n) 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 not isPrime(next_prime):
next_prime += 1
# Find previous prime number
while not isPrime(previous_prime):
previous_prime -= 1
# Arithmetic mean
mean = (previous_prime +
next_prime) / 2
# If n is a weak prime
if n == mean:
return True
else:
return False
# Driver code
n = 53
if isBalancedPrime(n):
print("Yes")
else:
print("No")
# This code is contributed by stutipathak31jan
C#
// C# program to check if a
// given number is Balanced 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 Balanced prime
static bool isBalancedPrime(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 weak prime
if (n == mean)
return true;
else
return false;
}
// Driver code
public static void Main()
{
int n = 53;
if (isBalancedPrime(n))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
Javascript
输出:
Yes