#include "bits/stdc++.h" using namespace std; typedef long long ll; typedef vector vll; #define int ll #define fi first #define se second #define SORT(a) sort(a.begin(),a.end()) #define rep(i,n) for(int i = 0;i < (n) ; i++) #define REP(i,n) for(int i = 0;i < (n) ; i++) #define MP(a,b) make_pair(a,b) #define pb(a) push_back(a) #define INF LLONG_MAX/2 #define all(x) (x).begin(),(x).end() #define debug(x) cerr<<#x<<": "<> N; N++; //arr[i] == 1 -> i は素数 int arr[200010]; for(int i = 0; i < N; i++) arr[i] = 1; for(int i = 2; i < sqrt(N); i++){ if(arr[i]){ for(int j = 0; i * (j + 2) < N; j++){ arr[i *(j + 2)] = 0; } } } vector pri; arr[0] = 0; arr[1] = 0; for(int i = 2; i < N; i++){ if(arr[i]){ pri.pb(i); } } // for(auto x:pri)cout << x << endl; // cout << endl; N--; rep(i,N) dp[0][i+1] = -INF; for(int i = 1;i <= pri.size();i++){ for(int j = 1;j <= N;j++){ dp[i][j] = dp[i-1][j]; if(j-pri[i-1] >= 0)dp[i][j] = max(dp[i-1][j],dp[i-1][j-pri[i-1]]+1); } } if(dp[pri.size()][N] < -30000)cout << -1 << endl; else cout << dp[pri.size()][N] << endl; // rep(i,pri.size()){ // cout << pri[i] << " : "; // rep(j,N+1){ // if(dp[i+1][j] == -1)cout << -1 << " "; // else cout << dp[i+1][j] << " "; // } // cout << endl; // } return 0; } //---------------------------------------------------------------- // g++ -std=c++14 code1.cpp // rm -r -f test;oj dl https://code-festival-2018-quala.contest.atcoder.jp/tasks/code_festival_2018_quala_c // rm -r -f test;oj dl https://dp.contest.atcoder.jp/tasks/dp_a // rm -r -f test;oj dl http://arc092.contest.atcoder.jp/tasks/arc092_b