题目描述
输入
输出
示例输入
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]);
}
}