#include "bits/stdc++.h" using namespace std; #define rep(i,n) for(int i=0;i PI; typedef vector VI; const LL MOD = 1000000007LL; int is_prime[20001]; /* dp[i][j]=i番目までの異なる素数の和がjとなるとき、最大の和の回数 dp[i][j]=max(dp[i-1][j],dp[i-1][j-prime[i]]+1) */ int dp[20001]; int main() { fill(is_prime, is_prime + 20001, 1); REP(i, 2, 20001) { if (!is_prime[i]) continue; for (int j = i * 2; j <= 20000; j += i) { is_prime[j] = 0; } } vector prime; REP(i, 2, 20001) { if (is_prime[i]) prime.push_back(i); } fill(dp, dp + 20001, -1); dp[0] = 0; int N; cin >> N; rep(i, prime.size()) { for (int j = N; j >= prime[i]; j--) { if (dp[j - prime[i]] == -1) continue; dp[j] = max(dp[j], dp[j - prime[i]] + 1); } } cout << dp[N] << endl; }