#include <iostream>
#include <vector>
#include <set>
using namespace std;
#define int long long
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int m, q;
cin >> m >> q;
vector<int> p (m);
//quickly check if the product > 10^7
int product = 1;
for(int i = 0; i < m; ++i) {
cin >> p[i];
if(product <= 10000000) product *= p[i];
}
int maxn = min(product, 10000000LL);
vector<int> largestPrime (maxn+1, 1);
for(int i = 0; i < m; ++i) {
for(int j = p[i]; j <= maxn; j += p[i]) {
largestPrime[j] = p[i];
}
}
vector<int> best (maxn+1, 1e9);
for(int i = 0; i < m; ++i) {
best[best.size()-1] = min(best[best.size()-1], (long long)((best.size()-1)/p[i]*p[i]));
}
for(int i = best.size()-2; i >= 0; --i) {
best[i] = min(best[i+1], (i+1)-largestPrime[i+1]);
}
vector<int> ans (maxn+1, 1e9); //max distance
for(int i = 0; i < p[m-1]; ++i) {
ans[i] = 1;
}
for(int i = p[m-1]; i < maxn+1; ++i) {
ans[i] = ans[best[i]] + 1;
}
int n;
for(int i = 0; i < q; ++i) {
cin >> n;
if(n >= product) {
cout << "oo\n";
continue;
}
cout << ans[n] << endl;
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |