#include using namespace std; struct edge {int /*from**/to,cost;}; typedef long long ll; typedef pair P; typedef vector VI; typedef vector VL; typedef vector VE; //static const int INF = 2147483647; //static const long long INf = 9223372000000000000; //static const long long INF = 9223372000000000000/2; static const int INF = 1000010000; static const int NIL = -1; static const int MOD = 1000000007; #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define np next_permutation #define pq priority_queue #define itn int #define scnaf scanf #define reutnr return #define scamf scanf //int dx4[4] = {0,1,0,-1}, dy4[4] = {-1,0,1,0}; //int dx5[5] = {-1,0,0,0,1}, dy5[5] = {0,-1,0,1,0}; //int dx8[8] = {-1,0,1,1,1,0,-1,-1}, dy8[8] = {1,1,1,0,-1,-1,-1,0}; //int dx9[9] = {-1,0,1,1,1,0,-1,-1,0}, dy9[9] = {1,1,1,0,-1,-1,-1,0,0}; #define int ll VL primes; bool is_prime[11451]; int m,n; int noodles[25]; int dp[11451]; void sieve(int n){ //n以下の素数の数を返す for(int i=0;i<=n;i++) is_prime[i] = true; is_prime[0] = is_prime[1] = false; for(int i=2;i<=n;i++){ if(is_prime[i]){ primes.pb(i); for(int j=2*i;j<=n;j += i) is_prime[j] = false; } } return; } void print(){ for(int i=0;i<=m;i++){ printf("%lld ",dp[i]); } return; } signed main(){ scanf("%lld%lld",&m,&n); sieve(m); int tmpmin=INF; for(int i=0;i=0;j--){ if(j-noodles[i]>=0&&dp[j]!=-1){ dp[j-noodles[i]] = max(dp[j]+1,dp[j-noodles[i]]); } } } //print(); int ans = m / tmpmin; for(int i=0;i