问题 D: 我的猜想
时间限制: 1 Sec 内存限制: 128 MB
题目描述
1742年,德国数学家哥德巴赫(Goldbach)提出了著名的哥德巴赫猜想(Goldbach Conjecture):任何一个不小于4的偶数可以表示为两个素数之和。这个猜想至今都没有完全被证明是正确的。
但是,对于一个大于或等于5的奇数,有的可以表示成两个素数之和,有的则不能。给定一个大于或等于5的奇数,判断是否能分解成两个素数之和。
输入
输入文件包含多个测试数据,每个测试数据占一行,为一个正整数m,m为奇数,且不小于5,不大于32767。测试数据一直到文件尾。
输出
对每个测试数据,如果m能分解成两个素数之和,输出yes,否则输出no。
样例输入
21
75
99
113
样例输出
yes
yes
yes
no
#include <iostream>
#include<cmath>
using namespace std;
int a[32768];
bool sushu(int n) { //判断素数
for (int i = 3; i <= sqrt((double)n); i++) {
if (n%i == 0)
return false;
}
return true;
}
int main()
{
int n;
a[1] = 1; a[2] = 2; a[3] = 3;
int num = 4;
for (int i = 5; i <= 32767; i += 2) {
if (sushu(i)) {
a[num++] = i;
//cout<<i<<" ";
}
}
while (cin >> n) {
int flag = false;
for (int i = 1; i < num; i++) {
for (int j = i; j < num; j++) {
if (a[i] + a[j] == n) {
//cout<<a[i]<<" "<<a[j]<<endl;
cout << "yes" << endl;
flag = true;
break;
}
}
}
if (flag == false)cout << "no" << endl;
}
return 0;
}