您的位置:首页 > 其它

UVA1210Sum of Consecutive Prime Numbers(素数打表 + 连续和)

2016-02-28 11:58 337 查看
题目链接

题意:输入一个数n (2 <= n <= 10000) 有多少种方案可以把n写成若干个连续素数之和

打出10000之内的素数表,然后再打出每个可能得到的和的方案数的表

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int Max = 10000;
int prime[Max + 5],total,flag[Max + 5];
int dp[6000000];  //可以求出10000所有素数和为5000000多
void get_prime()
{
memset(flag, 0, sizeof(flag));
total = 0;
for(int i = 2; i <= Max; i++)
{
if(flag[i] == 0)
{
prime[ ++total ] = i;
for(int j = i; j <= Max / i; j++)
flag[i * j] = 1;
}
}
}
void init()
{
memset(dp, 0, sizeof(dp));
int ans;
for(int i = 1; i <= total; i++)
{
ans = 0;
for(int j = i; j <= total; j++)  //第i个为起点,第j个为终点的素数段
{
ans += prime[j];
dp[ans]++;
}
}
}
int main()
{
get_prime();
init();
int n;
while(scanf("%d", &n) != EOF && n)
{
printf("%d\n", dp
);
}
return 0;
}


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