#include using namespace std; #define rep(i,n) for (int i = 0; i < (int)(n); ++i) #define rrep(i,n) for (int i = (int)(n-1); i >= 0; --i) #define Rep(i,a,b) for (int i = a; i < b; ++i) #define rRep(i,a,b) for (int i = a; i > b; --i) #define fore(i,a) for(auto &i:a) #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() #define Bit(x,i) (((x)>>(i))&1) using ll = long long; using vi = vector; using vll = vector; using vvi = vector; using vvll = vector; using vb = vector; using vs = vector; using pii = pair; using pll = pair; templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b Eratosthenes(int N) { vector is_prime(N+1); for(int i=0; i<=N; ++i) { is_prime[i] = true; } vector ret; for(int i=2; i<=N; ++i) { if(is_prime[i]) { for(int j=2*i; j<=N; j+=i) { is_prime[j] = false; } ret.emplace_back(i); } } return ret; } int dp[200100]; int main() { int N; cin >> N; vi P = Eratosthenes(N); dp[0] = 1; fore(p, P) { rRep(i, N, -1) { if(i + p <= N && dp[i]) chmax(dp[i+p], dp[i]+1); } } cout << dp[N]-1 << endl; }