#include #include #include #include #include #include #include #include #include #include #include using namespace std; int main(int argc, char const *argv[]) { int N; cin >> N; bool _prime[20010]; auto _era = [&]() { for(int i=0;i<=20010;++i)_prime[i] = true; _prime[0] = _prime[1] = false; for(int i=2;i*i <= 20010;++i) { if(_prime[i]) { for(int j=i*i;j<=20010; j += i) { _prime[j] = false; } } } }; _era(); vector primes; for(int i=0;i<=N;++i)if(_prime[i])primes.emplace_back(i); vector dp(N+1,-1); dp[0] = 0; auto chmax = [](int &x, int y) { if(x < y)x = y; return x; }; for(auto &pri : primes) { for(int j=N;j>=0;--j) { if(dp[j] != -1 && j + pri <= N) { chmax(dp[j+pri] , dp[j] + 1); } } } std::cout << dp[N] << std::endl; }