#include #include #include using namespace std; typedef long long ll; typedef pair P; #define MOD 1000000007 #define REP(i, N) for (int i = 0; i < N; ++i) #define REP1(i, N) for (int i = 1; i <= N; ++i) #define RREP(i, N) for (int i = N - 1; i >= 0; --i) #define ALL(a) a.begin(), a.end() int main() { bool is_prime[20001]; REP(i, 20001) is_prime[i] = true; is_prime[0] = false, is_prime[1] = false; for (int i = 2; i * i <= 20000; i++) { if (is_prime[i]) { for (int j = 2; i * j <= 20000; j++) { is_prime[i * j] = false; } } } vector prime; REP1(i, 20000) if (is_prime[i]) prime.push_back(i); int n; cin >> n; int dp[20001] = {}; REP(i, 20001) dp[i] = -1; dp[0] = 0; for (auto p : prime) { for (int i = n; i >= 0; --i) { if (p + i <= n && dp[i] != -1) { dp[p + i] = max(dp[p + i], dp[i] + 1); } } } cout << dp[n] << endl; return 0; }