#include #include #include using namespace std; typedef long long ll; map prime_factor(ll n){ //素因数分解 map table; for(int i=2;i*i<=n;i++){ while(n%i==0){ table[i]++; n/=i; } } if(n!=1) table[n]=1; return table;// key->素因数, value->べき乗 } bool is_prime(int n){ //素数判定 for(int i=2;i*i<=n;i++){ if(n%i==0) return true; } return false; } vector prime_table(int n){ //素数全列挙 vector prime(n+1,true); prime[0]=prime[1]=false; for(int i=2;i*i<=n;i++){ if(prime[i]!=true) continue; for(int j=2*i;j<=n;j+=i){ prime[j]=false; } } return prime; //i番目の要素が素数の場合trueを返す } int main(){ int N; cin >> N; vector tmp=prime_table(N); vector prime; for(int i=0;i<=N;i++){ if(tmp[i]==true){ prime.push_back(i); } } //for(int i=0;i=0;j--){ if(i+j<=N&&dp[j]!=-1){ dp[i+j]=max(dp[j]+1,dp[i+j]); } } } cout << dp[N] << endl; }