//https://yukicoder.me/problems/no/458 //https://yukicoder.me/submissions/203775 #include #include #include #include #include #include #include #include #include #include using namespace std; const int MAX_N=20000; int n; int dp[MAX_N+1]={}; bool p[MAX_N+1]; int main(){ cin >> n; fill(p,p+sizeof(p),true); p[0]=false; p[1]=false; for(int i=3;i<=n;i++) for(int j=0;j*j<=i;j++){ if(p[j]){ if(i%j) continue; else p[i]=false; } } memset(dp,-1,sizeof(dp)); dp[0]++; for(int i=2;i<=n;i++){ if(p[i]) for(int j=n;j>=0;j--){ if(j+i<=n && dp[j]!=-1) dp[j+i] = max(dp[j]+1, dp[j+i]); } } cout << dp[n] << endl; return 0; }