您的位置:首页 > 其它

POJ 2739 Sum of Consecutive Prime Numbers(素数表)

2010-06-13 14:13 513 查看
//简单题
//打一素数表然后预处理下,把所有答案都打出来就可以了
#include<iostream>
using namespace std;
int ans[10010];
const int MAXP = 10000;
int prime[100001];//记录素数数据,prime[0]为素数表的元素个数
bool is_prime[100010];//标号匹配
//筛选法生成素数表模板,感觉像容斥原理,把非质数的标为false
void prime_list()
{
memset(is_prime,true,sizeof(is_prime));//初始化素数表
for (int i = 2;i <= MAXP;i++)
{
if (is_prime[i])//如果在素数表中匹配的
prime[++prime[0]] = i;//++prime[0],增加素数的个数
for (int j = 1,k; (j <= prime[0]) && (k = i * prime[j]) <= MAXP;j++) //筛选循环
{
is_prime[k] = false;
if(i % prime[j] == 0) break;//很关键的剪枝步骤
}
}
}
int main()
{
int n;
prime_list();
memset(ans,0,sizeof(ans));
for(int i = 1;i < prime[0];++i)
{
int temp = prime[i];
for(int j = i+1;j < prime[0];++j)
{
if(temp > 10000)	break;
ans[temp]++;
temp += prime[j];
}
}
while(cin >> n && n != 0)
{
cout << ans
<< endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: