#include using ll=long long;constexpr int INF=std::numeric_limits::max()/2;constexpr ll LNF=std::numeric_limits::max()/2;constexpr double EPS=1e-8;constexpr int DX[]={1,0,-1,0,1,1,-1,-1};constexpr int DY[]={0,1,0,-1,-1,1,1,-1}; #ifdef PA_DEBUG #define PD(stmt)stmt #else #define PD(stmt) #endif #include #include namespace pcl{namespace utility{templatestd::ostream&operator<<(std::ostream&os,std::vectorconst&v){os<<'[';for(size_t i=0;istd::istream&operator>>(std::istream&is,std::vector&v){for(size_t i=0;i>v[i];return is;}}}using namespace pcl::utility; #include #include #include #include using namespace std; #define MAX_N 20001 int N;vectorsieve(int n){vectorprime;vectoris_prime(n+1,true);is_prime[0]=is_prime[1]=false;for(int i=2;i<=n;++i){if(is_prime[i]){prime.push_back(i);for(int j=2*i;j<=n;j+=i){is_prime[j]=false;}}}return prime;}int main(){cin>>N;vectorprime=sieve(N);int number_of_prime=prime.size();vector>dp(N+1,vector(number_of_prime+1,-1));for(int i=0;i<=0;i++){for(int j=0;j<=number_of_prime;j++){dp[i][j]=0;}}for(int i=0;i<=N;i++){for(int j=0;j=0&&dp[i-prime[j]][j]!=-1){dp[i][j+1]=max(dp[i][j],dp[i-prime[j]][j]+1);}}}cout<