Loading

pku-2909 (欧拉筛)

题意:哥德巴赫猜想。问一个大于2的偶数能被几对素数对相加.

思路:欧拉筛,因为在n<215,在3万多,一个欧拉筛得时间差不多4*104, 那么筛出来的素数有4千多个,那么两两组合直接打表,时间复杂度下于16*106

则时间还是卡的过去。

ac代码:

#include<cstdio>
const int N = 4e4;
int prime[N];
bool vis[N];
bool is_prime[N];
int viss[N<<2];
int Prime()
{
    int cnt = 0;
    for (int i = 2; i <= N; ++i)
    {
        if (!vis[i])
        {
            prime[cnt++] = i;
            is_prime[i] = 1;
        }
        for (int j = 0; j < cnt&&i*prime[j] <= N; ++j)
        {
            vis[i*prime[j]] = 1;
            if (i%prime[j] == 0)break;
        }
    }
    return cnt;
}

int main()
{
    int k = Prime();
    for (int i = 0; i < k;++i)
    for (int j = 0; j <= i; ++j)
        viss[prime[i] + prime[j]]++;
    int n;
    while (scanf("%d", &n), n)
    {
        printf("%d\n", viss[n]);
    }
}

 

posted @ 2018-09-19 15:51  青山新雨  阅读(170)  评论(0编辑  收藏  举报