UVa 1210 - Sum of Consecutive Prime Numbers(素数+连续和)

来源:互联网 发布:网络优化工程师 知乎 编辑:程序博客网 时间:2024/05/13 19:21

求所给的数能用多少种连续素数的和表示。

类似于求最大连续和优化的方法。使用前缀和减少运算。然后输入范围是2到10000,貌似可以打表交。

#include<cstdio>const int maxn=10010;int isp[1250],pre_p,sum[1250];bool np[maxn]={true,true};void prepare(){    for(int i=2;i<maxn;++i){        if(!np[i])            isp[pre_p++]=i;        for(int j=0;j<pre_p&&i*isp[j]<maxn;++j){            np[i*isp[j]]=true;            if(!(i%isp[j])) break;        }    }    for(int i=1;i<=pre_p;++i)        sum[i]=sum[i-1]+isp[i-1];    return;}int main(){    prepare();    int n;    while(~scanf("%d",&n)&&n){        int cnt=0;        for(int i=0;i<pre_p;++i){            if(isp[i]>n) break;            for(int j=i+1;j<=pre_p;++j)                if(n==sum[j]-sum[i]) ++cnt;        }        printf("%d\n",cnt);    }    return 0;}


0 0
原创粉丝点击