#include using namespace std; #define rep(i,a,b) for(int i=a;i eratosthenes(int n){ int arr[n+1]; rep(i,0,n+1){ arr[i] = 1; } arr[0] = 0; arr[1] = 0; for(int i = 2; i < n; i++){ if(arr[i]==1){ for(int j = 2*i; j < n+1; j+=i){ arr[j] = 0; } } } vector ret; for(int i = 2; i> n; vector primes = eratosthenes(n); int dp[n+1]; rep(i,0,n+1) dp[i] = -1; dp[0] = 0; for(auto e : primes){ for(int i = n; i > -1; i--){ if(i + e < n+1 && dp[i] > -1){ dp[i+e] = max(dp[i+e], dp[i] + 1); } } } cout << dp[n] << endl; }