UVA 1213(p343)----Sum of Different Primes

来源:互联网 发布:ubuntu如何识别u盘 编辑:程序博客网 时间:2024/05/16 07:12
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=1120;int u[maxn+50],prime[maxn+50];long long d[20][maxn+50],num,n,k;void get(){    num=1;    memset(u,true,sizeof(u));    for(int i=2;i<maxn;i++)    {        if(u[i]) prime[num++]=i;        for(int j=1;j<num;j++)        {            if(i*prime[j]>maxn) break;            u[i*prime[j]]=false;            if(i%prime[j]==0) break;        }    }   //for(int i=1;i<num;i++) cout<<i<<" "<<prime[i]<<endl;}void solve(){    d[0][0]=1;    for(int i=1;i<num;i++)        for(int j=14;j>=1;j--)           for(int k=prime[i];k<=maxn;k++)               d[j][k]+=d[j-1][k-prime[i]];}int main(){    get();    solve();   /* for(int i=1;i<=14;i++)        for(int j=1;j<=5;j++)          cout<<i<<" "<<j<<" "<<d[i][j]<<endl;*/    while(scanf("%d%d",&n,&k)!=EOF&&n)       printf("%d\n",d[k][n]);    return 0;}

0 0