傳送門:戳我
題目大意:哥德巴赫猜想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;
}