传送门:戳我
题目大意:哥德巴赫猜想balabala,要求你把一个整数拆分成两个奇素数。不能拆分则输出 "Goldbach's conjecture is wrong."
思路:显然 "Goldbach's conjecture is wrong."这种情况是不会出现的,这种XX猜想虽然还没有得到证明,但是在我们需要担心的范围内肯定是没有反例的,如果找到了反例那么你就牛逼了。剩下的就是筛选法打个素数表,然后暴力出结果。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int prime[1000000+50],n;
int main(){
memset(prime,0,sizeof(prime));
prime[0]=prime[1]=1;
for (int i=2;i<=1000000;i++){
if (prime[i]==0){
for (int j=2*i;j<=1000000;j+=i){
prime[j]=1;
}
}
}
/*
for (int i=1;i<=1000;i++){
if (prime[i]==0) cout<<i<<" ";
}
cout<<endl;
*/
while (scanf("%d",&n)!=EOF){
if (n==0) break;
for (int i=3;i<=n;i++){
if (prime[i]==0 && prime[n-i]==0){
printf("%d = %d + %d\n",n,i,n-i);
break;
}
}
}
return 0;
}