#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int book[1000],prime[1000];
long long b[1005];
int top=0;
void sushu(int n){
memset(book,0,sizeof(book));
memset(prime,0,sizeof(prime));
for(int i=2;i<=n;i++){
if(!prime[i]){
book[top]=i;
top++;
}
for(int j=0;j<top&&i*book[j]<=n;j++){
prime[i*book[j]]=1;
if(i%book[j]==0){
break;
}
}
}
}
int main(){
int n;
cin>>n;
memset(b,0,sizeof(b));
sushu(n);
b[0]=1;
for(int i=0;i<top;i++){
for(int j=book[i];j<=n;j++){
b[j]+=b[j-book[i]];
}
}
cout<<b[n]<<endl;
return 0;
}
转移方程为b[j]+=b[j-book[i]];