#include #include #include bool is_prime(int n, std::vector primes) { for (int i = 0; i < primes.size(); i++) { if (n % primes[i] == 0) return false; } return true; } void prime_list(int n, std::vector &primes) { if (n == 1) return; primes.push_back(2); if (n == 2) return; primes.push_back(3); for (int i = 5; i <= n; i += 2) { if (is_prime(i, primes)) { primes.push_back(i); } } } int main() { int m, n; std::cin >> m >> n; std::vector item(n); for (int i = 0; i < n; i++) { std::cin >> item[i]; } // dp[i] = i円で購入できるカップ麺の最大個数 int dp[10000 + 1] = { 0 }; for (int i = 0; i < n; i++) { dp[item[i]] = 1; } for (int i = 0; i < n; i++) { for (int j = 0; j <= m; j++) { if (dp[j] > 0 && j + item[i] <= m) { dp[j + item[i]] = std::max(dp[j] + 1, dp[j + item[i]]); } } } std::vector primes; prime_list(m, primes); long long ans = 0; for (int i = 0; i < primes.size(); i++) { ans += dp[m - primes[i]]; } //if (!is_prime(m, primes)) { ans += *std::max_element(dp, dp+m+1); //} std::cout << ans << std::endl; return 0; }