#include #include using namespace std; bool isPrime(int x){ if(x==0 ||x==1)return 0; if(x==2)return 1; if(x%2==0)return 0; for(int i=3;i*i<=x;i++)if(x%i==0)return 0; return 1; } void makePrime(vector& v ,int n){ for(int i=0;i<=n;i++){ if(isPrime(i))v.push_back(i); } } int main (){ int n; cin>>n; vector isPrime; makePrime(isPrime,n); //dp[i]:=iを作れる最大の和の回数 vector dp(20001,-1); dp[0]=0; for(int i=0;i=0;j--){ // if(j-isPrime[i]<0)dp[j]=dp[j]; // else { // dp[j]=max(dp[j],dp[j-isPrime[i]]+1); // } if(isPrime[i]+j<=n && dp[j]!=-1)dp[isPrime[i]+j]=max(dp[isPrime[i]+j],dp[j]+1); } // cout<