#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define rep(i, n) for (int i = 0; i < n; ++i) #define rrep(i, st, n) for (int i = st; i < n; ++i) using pii = pair; const int inf = 1e9 + 7; int dy[] = {0, 0, -1, 1, -1, 1, -1, 1}; int dx[] = {1, -1, 0, 0, -1, 1, 1, -1}; #define ceil(a, b) a / b + !!(a % b) #define chmax(a, b) a = max(a, b) #define chmin(a, b) a = min(a, b) const int lim = 20001; int table[lim]; vector v; void prime() { rep(i, lim) if (i % 2 == 0) table[i] = 1; table[2] = 0; table[1] = 1; for (int i = 3; i < sqrt(lim) + 1; i += 2) { int key = 2 * i; while (key < lim) { table[key] = 1; key += i; } } rep(i, lim) if (table[i] == 0) v.push_back(i); } int main() { prime(); int n; cin >> n; int dp[lim]; rep(i, lim) dp[i] = -1; dp[0] = 0; rep(k, v.size()) { for (int i = lim - 1; i >= 0; --i) { if (dp[i] != -1 && i + v[k] < lim) { chmax(dp[i + v[k]], dp[i] + 1); } } } cout << dp[n] << endl; }