#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<cassert>
const int sz=1e5+10;
const int lgsz=std::__lg(sz)+1;
int f[lgsz][sz],n,q;
inline int __gcd(int x,int y){
while(y!=0){
int temp=x;
x=y,y=temp%y;
}
return x;
}
int gcd(int l,int r){
int lg=std::__lg(r-l+1);
return __gcd(f[lg][l],f[lg][r-(1<<lg)+1]);
}
std::unordered_map<int,long long>ans;
int bs(int ls,int x,int s){
int l=s,r=n;
while(l<r){
int mid=l+r>>1;
if(gcd(ls,mid)>x)l=mid+1;
else r=mid;
}
return l;
}
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
int main(){
n=read();
for(int i=1;i<=n;i++)f[0][i]=read();
for(int i=1;i<=std::__lg(n);i++)
for(int j=1;j+(1<<i)-1<=n;j++)
f[i][j]=__gcd(f[i-1][j],f[i-1][j+(1<<i-1)]);
for(int i=1;i<=n;i++){
int p=i;
while(p<=n){
int lst=p,x=gcd(i,p);
p=bs(i,x,p)+1;
ans[x]+=p-lst;
}
}
q=read();
while(q--){
int x;
x=read();
if(ans.find(x)==ans.end())puts("0");
else printf("%lld\n",ans[x]);
}
return 0;
}