#include using namespace std; int main() { int n; cin >> n; vectorall(n+1,true); all[0]=all[1]=false; for(int i = 2; i <= sqrt(n); i++){ if(all[i]){ for(int j = 0; i * (j + 2) <= n; j++)all[i *(j + 2)] = false; } } vectorprime{0}; for(int i = 0; i <= n; i++){ if(all[i])prime.push_back(i); } int prime_size=(int)prime.size(); vector>dp(prime_size+1, vector(n+1, -1)); // for(int i=1;i=prime_size)break; if(dp.at(i).at(j) != -1){ dp.at(i+1).at(j) = max(dp.at(i+1).at(j), dp.at(i).at(j)); if(j+prime.at(i+1) <= n) dp.at(i+1).at(j+prime.at(i+1)) = max(dp.at(i+1).at(j+prime.at(i+1)) ,dp.at(i).at(j) + 1); } } } cout << dp.at(prime_size-1).at(n) << "\n"; return 0; }