PKU2262——Goldbach's Conjecture
2009-05-12 05:10 Logic0 阅读(201) 评论(0) 编辑 收藏 举报http://acm.pku.edu.cn/JudgeOnline/problem?id=2262
题目大体是验证歌德巴赫猜想。
把n写成两个素数相加的形式,范围为6<=n<1000000
个人感觉有点收获的一道题,不是在解题上,而是在语言本身和数组上。具体见“关于数组的一点总结”文。
解题思路:
求出1100000以内所有素数,把n从2开始减,一直到(n - prime_num[i])也为一个素数为止。
CODE:
/*
*date:2009-5-12
*author:Logic0
*/
#include <iostream> #include <cstring> #include <cstdlib> #include <string> #include <vector> #include <utility> #include <set> #include <map> #include <queue> #include <deque> #include <stack> #include <algorithm> #include <stdio.h> using namespace std; bool a[1100000]; long p[1100000]; int main() { long n; long num = 0,i,j; for(i=2; i<1100000; i++) { if(a[i]==0) { p[num]=i; num++; for(j=i; j<1100000/i; j++) { a[i*j]=1; } } } int left; while(cin>>n) { if(n==0 || n<6 || n%2!=0) continue; for(i=0 ; i<num ; i++) { left = n-p[i]; if(a[left] == 0) { cout<<n<<" = "<<p[i]<<" + "<<left<<endl; break; } } } return 0; }