简单验证哥德巴赫猜想
觉得是时候该拾起NOIP了,就先找了个比较简单的题练练手,结果还是错误百出,一开始写求素数结果死活不是自己想要的结果,仔细检查了一遍才看出来是判断条件写反了,什么世道啊这都能错。刚装上环境的时候还在想写个Hello world来试试,结果都忘了用的是C++了。。唉,记得在Cnbeta上看有人说过,现在民工很多,而且很多都是把C++当C用的……唉没想法了。
描述
输入N,验证4~N所有偶数是否符合哥德巴赫猜想。
(N为偶数)。
如果一个数,例如10,则输出第一个加数相比其他解法最小的方案。
如10=3+7=5+5,则10=5+5是错误答案。
输入格式
第一行N
输出格式
4=2+2
6=3+3
……
N=x+y
AC Code:
#include <iostream>
#include <math.h>
using namespace std;
int even(int n)
{
if(n%2==0)
return 1;
else
return 0;
}
int prime(int n)
{
int k;
k=(int)sqrt(n);
if(n==2)
return 1;
if(n%2==0||n==1)
return 0;
else
for(int i=3;i<=k;i+=2)
if(n%i==0)
return 0;
return 1;
}
void sums(int n)
{
int k=2;
if(prime(n-k))
cout<<n<<"="<<k<<"+"<<n-k<<endl;
else
for(int i=1;i<=n;i++)
if(prime(n-k-i))
{
cout<<n<<"="<<k+i<<"+"<<n-k-i<<endl;
break;
}
}
int main()
{
int n;
cin>>n;
for(int i=4;i<=n;i++)
if(even(i))
sums(i);
system("pause");
return 0;
}其实一开始我也想学舜提前弄个素数表的。。后来考虑到这个只是简单的证明而不需要高精度。。所以直接取消了那念头。。果然还是有很多废柴代码。。。判断偶数判断拆成的俩数是不是都是素数且保证是其中一个是最小的。。。
