using namespace std; #include #include #include #include #include int N; int dp[20009]; vector prime; vector isprime(20009); int main() { cin >> N; for (int i = 2; i <= N; i++) { isprime[i] = 1; } for (int j = 2; j <= int(sqrt(N)); j++) { for (int k=2; j*k <= N; k++) { isprime[j * k] = 0; } } for (int i = 2; i <= N; i++) { if (isprime[i]) { prime.push_back(i); } } memset(dp, -1, sizeof(dp)); dp[0] = 0; for (auto pr : prime) { for (int j = N; j >= 0; j--) { if (j + pr <= N and dp[j] != -1) { if (dp[j + pr] < dp[j] + 1) dp[j + pr] = dp[j] + 1; } } } cout << dp[N] << endl; }