#include <bits/stdc++.h>
using namespace std;
int n,dp[205],prime[205],t;
bool isprime[205];
void Euler(int n){
t=0;
memset(isprime,1,sizeof isprime);
isprime[1]=0;
for(int i=2;i<=n;i++){
if(isprime[i]) {
prime[++t] = i;
dp[i] = 1;//sfaslgreg
}
for(int j=1;j<=t && i*prime[j]<=n;j++){
isprime[i*prime[j]] = 0;
if(i%prime[j] == 0) break;
}
}
}
int main (){
//dp[0] = 1;
Euler(200);
for(int j=1;j<=t;j++){
for(int i=prime[j];i<=200;i++){
dp[i] += dp[i-prime[j]];//*dp[prime[j]];
}
}
while (cin >> n)
cout << dp[n] << endl;
return 0;
}
像12行那样初始化为什么不对。 且 这个的转移方程怎么得到的,我一开始是想dp[i] += dp[i-prime[j]*dp[prime[j]]