hdu 2189 http://acm.hdu.edu.cn/showproblem.php?pid=2189

来源:互联网 发布:看不到其他ubuntu 编辑:程序博客网 时间:2024/06/05 18:10
#include<stdio.h>#include<string.h>#include<math.h>#define max 155int c1[max],c2[max];int if_prime[max];void get_prime(){    for(int i=2; i<=(int)sqrt(max); i++)        if(if_prime[i]==0)            for(int j=i*i; j<=max; j+=i)                if_prime[j]=1;}int main(){    int TT,T;    int step;    scanf("%d",&TT);    int prime_num[max];    memset(if_prime,0,sizeof(if_prime));    get_prime();    for(int t=0; t<TT; t++)    {        scanf("%d",&T);        step=-1;        memset(c1,0,sizeof(c1));        memset(c2,0,sizeof(c2));        memset(prime_num,0,sizeof(prime_num));        for(int ii=2; ii<=T; ii++)            if(if_prime[ii]==0)            {                prime_num[++step]=ii;//把1-150中的素数存在prime_num[step]中。            }        for(int i=0;i<=T;i+=prime_num[0])          c1[i]=1;        for(int i=1; i<=step; i++)//给定值中的素数的个数。        {            for(int j=0; j<=T; j++)            {                for(int k=0; k+j<=T;k+=prime_num[i])                {                         c2[k+j]+=c1[j];                }            }           for(int g=0;g<=T;g++)           {               c1[g]=c2[g];               c2[g]=0;           }        }        //for(int i=0;i<=T;i++)       //  printf("c1=%d ",c1[i]);         //printf("\n");        //int ans=0;        printf("%d\n",c1[T]);    }    return 0;}

原创粉丝点击