#include #include #include #include #include #include /* #include #include #include #include #include */ using namespace std; typedef long long ll; //typedef pair P; int N; int prime_num; int prime[20000]; int genprime() { prime[0] = 2; prime_num = 1; for (int i=1;i<=(N/2+1);i++) { int k = 2*i+1; for (int j=0;prime[j] > 0 && prime[j] -1< sqrt(k);j++) { if (k % prime[j] == 0) { goto gotoptr; } } prime[prime_num++] = k; gotoptr: continue; } return prime_num; } // i という値を、j=prime[dp] まで使って表したときの回転回数の最大値 int dp[20010]; int main() { cin >> N; genprime(); for (int j=0;j<=N;j++) { dp[j] = -1; } dp[0] = 0; for (int j=0;(j < prime_num && prime[j] <= N);j++) { for (int i=N;i>=0;i--) { if (dp[i] != -1 && i+prime[j] < 20010) { dp[i+prime[j]] = max({dp[i] + 1, dp[i+prime[j]]}); } } } int ans = -1; cout << dp[N] << endl; }