#include #include using namespace std; struct SieveEratos{ vector t; vector primes; SieveEratos(int n):t(n+1,true){ t[0] = t[1] = false; for(int i = 2; n >= i; i++){ if(t[i]){ primes.emplace_back(i); for(int j = i+i; n >= j; j+=i){ t[j] = false; } } } } bool operator[](int x){return t[x];} }; int main(){ int m,n;cin>>m>>n; vector A(10001,10001); A[0] = 0; int mn = 1000; for(int i = 0; n > i; i++){ int c;cin>>c; mn = min(c,mn); for(int j = 0; 10000 >= j; j++){ if(A[j] == 10001)continue; for(int k = j+c; 10000 >= k; k+=c){ if(A[k] == 10001)A[k] = A[j]+((k-j)/c); else A[k] = max(A[k],A[j]+((k-j)/c)); } } } SieveEratos P(10001); long long ans = 0; for(int i = 1; m > i; i++){ if(P[i] && A[m-i] != 10001){ ans += A[m-i]; } } cout << ans+(m-1)/mn << endl; }