代码改变世界

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;

}