#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; vector prime; bool isPrime[20020]; int makePrime(){ for(int i = 0; i < 20020; i++){ isPrime[i] = true; } for(int i = 2; i < 20020; i++){ if(!isPrime[i]) continue; prime.push_back(i); for(int j = i; j < 20020; j += i){ isPrime[j] = false; } } return prime.size(); } int dp[5000][20020]; int main(){ int n; cin >> n; int sz = makePrime(); for (int i = 0; i < sz + 1; i++){ for (int j = 0; j < 20020; j++){ dp[i][j] = -1; } } dp[0][0] = 0; for (int i = 0; i < sz; i++){ for (int j = 0; j < 20020; j++){ if(dp[i][j] == -1) continue; dp[i+1][j] = max(dp[i+1][j], dp[i][j]); if(j+prime[i] >= 20020) continue; dp[i+1][j+prime[i]] = max(dp[i][j+prime[i]], dp[i][j]+1); } } printf("%d\n", dp[sz][n]); return 0; }