1. 程式人生 > >悼念512汶川大地震遇難同胞——來生一起走 HDU

悼念512汶川大地震遇難同胞——來生一起走 HDU

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

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



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

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

Input

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

Output

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

Sample Input

3
3
4
5

Sample Output

1
1
2
#include<cstdio>
#include<stack>
#include<set>
#include<vector>
#include<queue>
#include<algorithm>
#include<cstring>
#include<string>
#include<map>
#include<iostream>
#include<cmath>
using namespace std;
#define inf 0x3f3f3f3f
typedef long long ll;
const int N=111;
const int mmax=11111;
const int MOD = 1e5+ 7;
int val[N];
int a[mmax],t[mmax],num[N];
int main()
{
    int n;
    int c;
     int sum=0;
        val[sum++]=2;
        for(int i=3; i<=155; i++)
        {
            int flag=0;
            for(int j=2; j*j<=i; j++)
            {
                if(i%j==0)
                {
                    flag=1;
                    break;
                }
            }
            if(!flag){
                val[sum++]=i;
            }
        }
    cin>>c;
    while( c--)
    {
        cin>>n;
        memset(a,0,sizeof(a));
        memset(t,0,sizeof(t));
        a[0]=1;
        for(int i=0; i<sum; i++)
        {
            for(int j=0; j<=n; j++)
            {
                if(a[j])
                {
                    for(int k=0; j+k*val[i]<=n; k++)
                    {
                        t[j+k*val[i]]+=a[j];
                    }
                }
            }
            memcpy(a,t,sizeof(a));
            memset(t,0,sizeof(t));
        }
        cout<<a[n]<<endl;
    }
    return 0;
}