#include #include std::vector sieve(int n) { std::vector nums(n + 1, true); std::vector primes; for (int i = 2; i *i <= n; i++) { if (nums[i]) { for (int j = 2; i*j <= n; j++) { nums[i*j] = false; } } } for (int i = 2; i < nums.size(); i++) { if (nums[i]) { primes.push_back(i); } } return primes; } int main(void) { int n; std::cin >> n; std::vector primes = sieve(n); std::vector dp(n + 1, 0); for (auto p: primes) { for (int i = n; i >= p+2; i--) { int ref = i - p; if (dp[ref] && dp[ref] >= dp[i]) { dp[i ] = dp[ref] + 1; } } if (!dp[p]) { dp[p] = 1; } } if (dp[n]) { std::cout << dp[n] << std::endl; } else { std::cout << -1 << std::endl; } system("pause"); return 0; }