來生一起走

 

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2367    Accepted Submission(s): 1186

 

Problem Description

媽媽
你別哭
淚光照亮不了
我們的路
讓我們自己
慢慢的走

媽媽
我會記住你和爸爸的模樣
記住我們的約定
來生一起走



上面這首詩節選自一位詩人紀念遇難同胞的作品,並沒有華麗的語言,但是每位讀者都應該能感受到作品傳達的濃濃愛意,也許還有絲絲無奈。確實,太多的關於孩子不幸的報道衝擊着我們每一顆柔弱的心。正如溫家寶總理所說“多難興邦”,這場災難讓我們很多80後的年輕人一下子成熟了起來,其中很多人以自願者的身份走上了抗震救災的第一線。
今天,災區又來了n位志願者,抗震救災指揮部需要將他們分爲若干個小組,小組的數量不限,但是要求每個小組的人數必須爲素數,請問我們有幾種分組的方法呢?

特別說明:
1、可以只有一個組;
2、分組的方法只和人數有關,而與具體的人員無關,即:你可以假設人是無區別的。

 


 

Input

輸入數據首先包含一個正整數C,表示有C組測試用例,然後是C行數據,每行包含一個正整數n(2<=n<=150),表示志願者的總人數。

 


 

Output

對於每組測試數據,請輸出分組的方案數目,每個輸出佔一行。

 


 

Sample Input


 

3 3 4 5

 


 

Sample Output


 

1 1 2

 


 

經典的母函數,記得要把打表放在外面,否則可能超時呦!

AC代碼:

#include<cstdio>
#include<cstring>
int f[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157};
int c1[300],c2[300];

void kind()
{
     int i,j,k;
     memset(c1,0,sizeof(c1));
     memset(c2,0,sizeof(c2));
     for(i=0;i<=150;i+=2)
     {  c1[i]=1; c2[i]=0; }
     for(i=1;i<37;i++)
     {
         for(j=0;j<=150;j++)
             for(k=0;k+j<=150;k+=f[i])
                c2[k+j]+=c1[j];
         for(j=0;j<=150;j++)
          {  c1[j]=c2[j];  c2[j]=0; }   
     }    
    
}

int  main()
{
    int  c,n;
    kind();
    scanf("%d",&c);
    while(c--)
    {
         scanf("%d",&n);
         printf("%d\n",c1[n]);
    }
    return 0;
} 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章