C++程序 检查质数是否可以表示为两个质数的和
给定一个质数N,任务是检查是否可以将N表示为两个不同质数的和。
注意 :N的范围小于10 8 。
例子:
输入: N = 13
输出: 是
解释: 数字13可以写成11 + 2,
这里11和2都是质数。
输入: N = 11
输出: 否
简单解法 :一个简单的解法是创建一个筛以存储所有小于数N的质数。然后从1到N运行循环并检查是否 n 和 n-i 都是质数。如果是,则打印是;否则打印否。
高效解法 :除了2外,所有质数都是奇数。所以不可能将一个质数(奇数)表示为两个奇数质数的和,因此我们确定这两个质数中的一个应该是2。因此我们必须检查n-2是否为质数。如果是,我们打印“是”,否则打印“否”。
例如,如果数字是19,则我们必须检查19-2=17是否为质数。如果17是质数,则打印“是”否则打印“否”。
下面是上述方法的实现:
// C++ program to check if a prime number
// can be expressed as sum of
// two Prime Numbers
#include <bits/stdc++.h>
using namespace std;
// Function to check whether
// a number is prime or not
bool isPrime(int n)
{
if (n <= 1)
return false;
for (int i = 2; i <= sqrt(n); i++)
{
if (n % i == 0)
return false;
}
return true;
}
// Function to check if a prime number
// can be expressed as sum of
// two Prime Numbers
bool isPossible(int N)
{
// if the number is prime,
// and number-2 is also prime
if (isPrime(N) && isPrime(N - 2))
return true;
else
return false;
}
// Driver code
int main()
{
int n = 13;
if (isPossible(n))
cout << "Yes";
else
cout << "No";
return 0;
}
输出:
是