#include #include using namespace std; int main(void) { constexpr int inf = 987654321; int n; scanf("%d", &n); vector is_prime(n+1, true); is_prime[0] = is_prime[1] = false; int sq = sqrt(n); for(int i=2; i<=sq; ++i) { if(is_prime[i]) { for(int j=i*i; j<=n; j+=i) { is_prime[j] = false; } } } vector primes; for(int i=2; i<=n; ++i) { if(is_prime[i]) { primes.push_back(i); } } int m = primes.size(); vector dp(n+1, -inf); // dp[n+1] dp[0] = 0; for(int i=0; i=0; --acc) { dp[acc+primes[i]] = max(dp[acc+primes[i]], dp[acc] + 1); } } int res = dp[n]; if(res < 0) { res = -1; } printf("%d\n", res); return 0; } // 典型できない系おっさん