#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() #define rep(i,n) for(int i=0; i pi; typedef pair pl; typedef pair plc; typedef pair pss; int arr[100010]; int dp[20010]; vector v; int n; void Eratosthenes() { rep(i, 20001)arr[i] = 1; FOR(i, 2, sqrt(20001)) { if (arr[i]) { for (int j = 0; i*(j + 2) < 20001; j++) arr[i*(j + 2)] = 0; } } } int main() { cin >> n; Eratosthenes(); rep(i, n + 1)dp[i] = -1; for (int i = 2; i < 20001; i++) { if (arr[i])v.push_back(i); } dp[0] = 0; for (auto u : v) { for (int j = n; j >= 0; j--) { if (u + j <= n && dp[j] != -1) { dp[u + j] = max(dp[u+j],dp[j]+1); } } } cout << dp[n] << endl; return 0; }