POJ 2262 Goldbach's Conjecture(素数表)

//验证哥德巴赫猜想,结论必然正确……故不必要检测错误情况 //用筛选法打表 //如果i是素数,n-i也是素数,则这两个数就是分解的结果 //复杂度必须O(n)才能过,O(n^2)必定TLE #include<iostream> #include<cstring> using namespace std; const int MAXP = 10000010; bool isPrime[MAXP]; int prime[MAXP]; void primeList() { memset(isPrime,true,sizeof(isPrime)); for(int i = 2;i <= MAXP;++i) { if(isPrime[i]) prime[++prime[0]] = i; for(int j = 1,k;(j <= prime[0]) && (k = i * prime[j]) <= MAXP;++j) { isPrime[k] = false; if(i % prime[j] == 0) break; } } } int main() { primeList(); int n,a,b; while(scanf("%d",&n) && n != 0) { for(int i = 1;i <= prime[0];++i) { if(isPrime[n - prime[i]]) { a = prime[i]; b = n - prime[i]; break; } } printf("%d = %d + %d/n",n,a,b); } return 0; }  

你可能感兴趣的:(POJ 2262 Goldbach's Conjecture(素数表))