作为回归题挺有意思的。
这个求和级数需要了解一下:

so 暴力即可,相同的 可以搞个 cnt 优化一下。
cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;
int cnt[N];
int n, K;
LL s[N];
vector<int> G;
int main () {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> K;
memset(cnt, 0, sizeof(cnt));
for (int i = 1; i <= K; i ++) {
int x;
cin >> x;
if (cnt[x] == 0) {
G.push_back(x);
}
cnt[x] ++;
}
sort(G.begin(), G.end());
memset(s, 0, sizeof(s));
for (int i : G) {
for (int j = 0; j <= n; j += i) {
s[j] += cnt[i];
}
}
for (int i = 1; i <= n; i ++) {
s[i] += s[i - 1];
}
int q;
cin >> q;
while (q --) {
int l, r;
cin >> l >> r;
if (l != 0) {
cout << s[r] - s[l - 1] << "\n";
}
else {
cout << s[r] << "\n";
}
}
return 0;
}