Sum of Consecutive Prime Numbers UVA

来源:互联网 发布:djvu mac 打开 编辑:程序博客网 时间:2024/06/05 09:45

Think:
1题意:输入正整数n(2 <= n <= 10000),求连续素数之和等于n的方案数
2思路:
1>筛法建立素数表+初级dp思想(从后往前规划得到当前素数可连续组合得到的数值)
2>参考博客:“素数表+区间滑动”,“素数表+区间枚举”

vjudge题目链接

以下为Accepted代码

#include <bits/stdc++.h>using namespace std;int tp, link[10400], dp[10400];void Init_prime();void Init_dp();int main(){    Init_prime();    Init_dp();    int n;    while(scanf("%d", &n) && n){        printf("%d\n", dp[n]);    }    return 0;}void Init_prime(){    int v[10400];    tp = 0;    memset(v, 0, sizeof(v));    v[1] = 1, v[2] = 0;    for(int i = 2; i <= 10000; i++){        if(!v[i]){            link[tp++] = i;            for(int j = i*2; j <= 10000; j += i){                v[j] = 1;            }        }    }}void Init_dp(){    memset(dp, 0, sizeof(dp));    for(int i = tp-1; i >= 0; i--){        int t = 0;        for(int j = i; j >= 0; j--){            if(t + link[j] <= 10000){                t += link[j];                dp[t] += 1;            }            else                break;        }    }}