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<<];
int Prime()
{
int cnt = ;
for (int i = ; i <= N; ++i)
{
if (!vis[i])
{
prime[cnt++] = i;
is_prime[i] = ;
}
for (int j = ; j < cnt&&i*prime[j] <= N; ++j)
{
vis[i*prime[j]] = ;
if (i%prime[j] == )break;
}
}
return cnt;
} int main()
{
int k = Prime();
for (int i = ; i < k;++i)
for (int j = ; j <= i; ++j)
viss[prime[i] + prime[j]]++;
int n;
while (scanf("%d", &n), n)
{
printf("%d\n", viss[n]);
}
}
上一篇:关于dos命令行脚本编写


下一篇:Windows通用应用开发手记-Behavior SDK概述