#if __has_include() #include #endif #ifdef LOCAL #include "algo/debug.h" #else #define _debug(...) 42 #endif #include #include #include #include #include std::vector enumerate_primes(std::size_t x) { std::vector bit_primes(x + 1, true); bit_primes[0] = bit_primes[1] = false; for (std::size_t i = 2; i * i <= x; ++i) if (bit_primes[i]) for (std::size_t j = 2; i * j <= x; ++j) bit_primes[i * j] = false; std::vector ret; for (std::size_t i = 0; i <= x; ++i) if (bit_primes[i]) ret.push_back(i); return ret; } int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); std::size_t n; std::cin >> n; std::vector primes = enumerate_primes(n); std::size_t m = primes.size(); std::vector> dp(n + 1, std::nullopt); dp[0] = 0; for (std::size_t i = 0; i < m; ++i) { for (std::size_t j = n; j-- >= 1;) { if (!dp[j].has_value()) continue; if (j + primes[i] <= n) dp[j + primes[i]] = std::max(dp[j + primes[i]].value_or(0), dp[j].value() + 1); } } std::cout << (dp[n].has_value() ? (int)dp[n].value() : -1) << '\n'; return 0; }