#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef tuple t3; using namespace std; vector dp; int n; bool prime(int a) { for(int i = 2;i * i <= a;i++) { if(a % i == 0) { return false; } } return true; } void solve() { cin >> n; dp.assign(n+1, -1); set p; for(int i = 2;i <= n;i++) { if(prime(i)) { p.insert(i); } } dp[0] = 0; for(auto e : p) { for(int i = n;i >= 0;i--) { if(i + e > n) { continue; } if(dp[i] >= 0) { dp[i + e] = max(dp[i + e], dp[i] + 1); } } } cout << dp[n] << endl; } int main() { solve(); return 0; }