Problem Description
任何大于1的自然数N,都可以写成若干各大于等于2且小于等于N的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式。例如9的质数和表达式就是四种本质不同的形式:9=2+5+2=2+3+2+2=3+3+3=2+7.
这里所谓两个本质相同的表达式是指可以通过交换其中一个表达式中参加和运算的各个数的位置而直接得到另一个表达式。
试编程求解自然数N可以写成多少种本质不同的质数和表达式。
这里所谓两个本质相同的表达式是指可以通过交换其中一个表达式中参加和运算的各个数的位置而直接得到另一个表达式。
试编程求解自然数N可以写成多少种本质不同的质数和表达式。
Input
输入有多组数据,每组数据只有一行为自然数N(2<=N<=200)。
Output
对于每组数据输出N的本质不同的质数和表达式的数目。
Sample Input
2 200
Sample Output
1 9845164
//标程:
#include<stdio.h> #include<string.h> int dp[210],b[210],a[210]; int main() { int i,j,n,k,cnt=0; memset(b,0,sizeof(b)); b[1]=1; for(i=2;i<=200;i++) { if(!b[i]) a[++cnt]=i; j=i*2; while(j<=200) { b[j]=1; j+=i; } } memset(dp,0,sizeof(dp)); dp[0]=1; for(i=1;i<=cnt;i++) for(j=a[i];j<=200;j++) dp[j]+=dp[j-a[i]]; while(scanf("%d",&n)!=EOF) printf("%d\n",dp[n]); return 0; }