#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e5 + 5;
int n, q;
int a[N];
int f[17][N]; // f[k][i] = gcd của đoạn bắt đầu từ i và có độ dài là 2^k
void precompute() {
for (int i = 1; i <= n; i++) f[0][i] = a[i];
for (int k = 1; (1 << k) <= n; k++) {
for (int i = 1; i + (1 << k) - 1 <= n; i++) {
f[k][i] = __gcd(f[k - 1][i], f[k - 1][i + (1 << (k - 1))]);
}
}
}
int getGCD(int l, int r) {
int k = log2(r - l + 1);
return __gcd(f[k][l], f[k][r - (1 << k) + 1]);
}
// Tìm vị trí j đầu tiên > i sao cho getGCD(l, j) < g
int findNext(int l, int i, int g) {
int lo = i + 1, hi = n, ans = n + 1;
while (lo <= hi) {
int mid = (lo + hi) >> 1;
if (getGCD(l, mid) < g) {
ans = mid;
hi = mid - 1;
}
else {
lo = mid + 1;
}
}
return ans;
}
map<int, ll> ans; // ans[x] = (Số đoạn có gcd = x)
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
precompute();
// Nhận xét quan trọng:
// Khi chốt đầu mút l thì ta có tối đa O(log2(MAX_A)) giá trị gcd phân biệt của mọi đoạn [l, r] (l <= r)
// ~ O(n * log2(MAX_A) * log2(n))
for (int l = 1; l <= n; l++) { // chốt đầu mút l
for (int i = l; i <= n; ) {
int g = getGCD(l, i);
int j = findNext(l, i, g);
ans[g] += j - i; // với r nằm trong đoạn [i, j - 1] thì ta có getGCD(l, r) = g
i = j;
}
}
cin >> q;
while (q--) {
int x; cin >> x;
cout << (ans.count(x) ? ans[x] : 0) << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDFlNSArIDU7IAoKaW50IG4sIHE7ICAKaW50IGFbTl07IAoKaW50IGZbMTddW05dOyAvLyBmW2tdW2ldID0gZ2NkIGPhu6dhIMSRb+G6oW4gYuG6r3QgxJHhuqd1IHThu6sgaSB2w6AgY8OzIMSR4buZIGTDoGkgbMOgIDJeawoKdm9pZCBwcmVjb21wdXRlKCkgewoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBmWzBdW2ldID0gYVtpXTsgIAoKCWZvciAoaW50IGsgPSAxOyAoMSA8PCBrKSA8PSBuOyBrKyspIHsKCQlmb3IgKGludCBpID0gMTsgaSArICgxIDw8IGspIC0gMSA8PSBuOyBpKyspIHsKCQkJZltrXVtpXSA9IF9fZ2NkKGZbayAtIDFdW2ldLCBmW2sgLSAxXVtpICsgKDEgPDwgKGsgLSAxKSldKTsgCgkJfQoJfQp9CgppbnQgZ2V0R0NEKGludCBsLCBpbnQgcikgewoJaW50IGsgPSBsb2cyKHIgLSBsICsgMSk7IAoJcmV0dXJuIF9fZ2NkKGZba11bbF0sIGZba11bciAtICgxIDw8IGspICsgMV0pOyAKfQoKLy8gVMOsbSB24buLIHRyw60gaiDEkeG6p3UgdGnDqm4gPiBpIHNhbyBjaG8gZ2V0R0NEKGwsIGopIDwgZwppbnQgZmluZE5leHQoaW50IGwsIGludCBpLCBpbnQgZykgewoJaW50IGxvID0gaSArIDEsIGhpID0gbiwgYW5zID0gbiArIDE7CgoJd2hpbGUgKGxvIDw9IGhpKSB7CgkJaW50IG1pZCA9IChsbyArIGhpKSA+PiAxOyAgCgkJCgkJaWYgKGdldEdDRChsLCBtaWQpIDwgZykgewoJCQlhbnMgPSBtaWQ7ICAKCQkJaGkgPSBtaWQgLSAxOyAKCQl9CQoJCWVsc2UgewoJCQlsbyA9IG1pZCArIDE7IAoJCX0KCX0KCglyZXR1cm4gYW5zOyAKfQoKbWFwPGludCwgbGw+IGFuczsgLy8gYW5zW3hdID0gKFPhu5EgxJFv4bqhbiBjw7MgZ2NkID0geCkgCgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyAgCQoJY2luID4+IG47IAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gYVtpXTsgCgoJcHJlY29tcHV0ZSgpOyAgCgoJLy8gTmjhuq1uIHjDqXQgcXVhbiB0cuG7jW5nOiAKCS8vIEtoaSBjaOG7kXQgxJHhuqd1IG3DunQgbCB0aMOsIHRhIGPDsyB04buRaSDEkWEgTyhsb2cyKE1BWF9BKSkgZ2nDoSB0cuG7iyBnY2QgcGjDom4gYmnhu4d0IGPhu6dhIG3hu41pIMSRb+G6oW4gW2wsIHJdIChsIDw9IHIpCgkvLyB+IE8obiAqIGxvZzIoTUFYX0EpICogbG9nMihuKSkgCglmb3IgKGludCBsID0gMTsgbCA8PSBuOyBsKyspIHsgLy8gY2jhu5F0IMSR4bqndSBtw7p0IGwgCgkJZm9yIChpbnQgaSA9IGw7IGkgPD0gbjsgKSB7CgkJCWludCBnID0gZ2V0R0NEKGwsIGkpOyAKCQkJaW50IGogPSBmaW5kTmV4dChsLCBpLCBnKTsgIAoJCQlhbnNbZ10gKz0gaiAtIGk7IC8vIHbhu5tpIHIgbuG6sW0gdHJvbmcgxJFv4bqhbiBbaSwgaiAtIDFdIHRow6wgdGEgY8OzIGdldEdDRChsLCByKSA9IGcKCQkJaSA9IGo7IAoJCX0KCX0KCgljaW4gPj4gcTsgCgoJd2hpbGUgKHEtLSkgewoJCWludCB4OyBjaW4gPj4geDsgCgkJY291dCA8PCAoYW5zLmNvdW50KHgpID8gYW5zW3hdIDogMCkgPDwgJ1xuJzsgCgl9Cn0=