题目:
代码:
#include<iostream>
#include<string>
#include<queue>
#include<cmath>
using namespace std;
bool isPrime(int n)
{
if (n == 1 || n == 0)
return false;
if (n % 2 == 0)
return false;
for (int i = 3; i <= sqrt(n)+1; i = i + 2)
{
if ( n % i == 0)
return false;
}
return true;
}
//
//int main()
//{
// int n;
// cin >> n;
// for (int i = pow(10, n-1); i < pow(10, n); i++)
// {
// if (isPrime(i))
// {
// int m = n -1;
// int tmp = i;
// while (m--)
// {
// tmp = tmp / 10;
// if (!isPrime(tmp))
// break;
// if (tmp < 10 && isPrime(tmp))
// cout << i<<endl;
// }
// }
// }
// return 0;
//
int main()
{
int n;
cin >> n;
if (!isPrime(n))
cout << "No" << endl;
else
{
for (int i = 1; i < n; i++)
{
if (isPrime(i))
{
for (int j = i + 1; j < n; j++)
{
if (isPrime(j))
{
int k = n - i - j;
if (isPrime(k)&&k!=i&&k!=j&&k>0)
{
cout << "Yes" << endl;
return 0;
}
}
}
}
}
cout << "No" << endl;
}
return 0;
}
首先,需要注意的是判断N是否为质数,然后再去判断是否可以表示为三个不同质数的和的形式。
题目本身并不难,暴力枚举就可以。判断素数的函数,我写的有点问题,所以下面重新给出:
bool isPrime(int n)
{
if (n == 2)
return true;
if (n == 1 || n == 0)
return false;
if (n % 2 == 0)
return false;
for (int i = 3; i <= sqrt(n)+1; i = i + 2)
{
if ( n % i == 0)
return false;
}
return true;
}
如果代码有问题或不足,欢迎指出,,,
(立个flag?一周三更?)