題目描述
輸入
輸出
示例輸入
3 3 4 5
示例輸出
1 1 2
提示
//先求出150以內的所有素數,存在數組a[]中,p記錄下標,相當於有p件物品
#include <stdio.h>
#include <string.h>
#include <math.h>
int max(int a,int b)
{
return a>b?a:b;
}
int dp[155];
int a[151];
int main()
{
int c,n,i,j,k;
scanf("%d",&c);
for(k=1; k<=c; k++)
{
memset(dp,0,sizeof(dp));
memset(a,0,sizeof(a));
int p=0;
dp[0]=1;
scanf("%d",&n);
for(i=2; i<150; i++)
{
for(j=2; j<=sqrt(i); j++)
{
if(i%j==0)
break;
}
if(j>sqrt(i))
a[p++]=i;
}
for(i=0; i<p; i++)
for(j=a[i]; j<=n; j++)
dp[j]=dp[j]+dp[j-a[i]]; //dp[i][j]表示前i個素數,剩餘j個人的空間情況下的種類數
printf("%d\n",dp[n]);
}
}