#include #include #include using namespace std; typedef long long Int; Int Divisors[1000001]; Int L1=0; Int Divisors2[1000001]; Int L2=0; Int Merged[1000001]; Int mL=0; int main() { freopen("game.in","r",stdin); freopen("game.out","w",stdout); Int A,B; Int i; Int uk1,uk2; Int k,L,R; Int myL,myR; Int l,r,mid; scanf("%I64d %I64d",&A,&B); for (i=1;i*i<=A;i++) { if (A%i==0) { L1++; Divisors[L1]=i; if (i*i!=A) { L1++; Divisors[L1]=A/i; } } } sort(Divisors+1,Divisors+1+L1); for (i=1;i*i<=B;i++) { if (B%i==0) { L2++; Divisors2[L2]=i; if (i*i!=B) { L2++; Divisors2[L2]=B/i; } } } sort(Divisors2+1,Divisors2+1+L2); uk1=1; uk2=1; while(uk1<=L1 && uk2<=L2) { if (Divisors[uk1]Divisors2[uk2]) { uk2++; } else { mL++; Merged[mL]=Divisors[uk1]; uk1++; uk2++; } } scanf("%I64d",&k); for (i=1;i<=k;i++) { scanf("%I64d %I64d",&L,&R); if (L>R) { printf("0\n"); continue; } l=1; r=mL; myL=mL+1; while(l<=r) { mid=(l+r)/2; if (Merged[mid]>=L) { myL=mid; r=mid-1;; } else { l=mid+1; } } l=1; r=mL; myR=0; while(l<=r) { mid=(l+r)/2; if (Merged[mid]<=R) { myR=mid; l=mid+1; } else { r=mid-1; } } if (myL>myR) printf("0\n"); else printf("%I64d\n",myR-myL+1); } return 0; }