#include <iostream> #include <algorithm> #include <cstdio> using namespace std; const int N(35),N2(45009); struct factor{ int n;int num; }; bool prime[N2]={false}; int pri[N2]={0}; factor B1[N]; void init() { fill(prime,prime+N2,true); for(int i=2;i<=45000;i++) if(prime[i]) for(int j=2;i*j<=45000;j++) prime[i*j]=false; for(int i=2;i<=45000;i++) if(prime[i]) { pri[0]++; pri[pri[0]]=i; } } int trans(int x,factor *t) { t[0].n=0; for(int i=1;i<=pri[0];i++) if(x%pri[i]==0) { t[0].n++; t[t[0].n].n=pri[i]; t[t[0].n].num=1; x/=pri[i]; while(x%pri[i]==0) { t[t[0].n].num++; x/=pri[i]; } } if(x>1) { t[0].n++; t[t[0].n].n=x; t[t[0].n].num=1; } } int ind(int x,int fac) { int num(0); while(x%fac==0) { x/=fac; num++; } return num; } int main() { int n,a0,a1,b0,b1; init(); cin>>n; for(int z=0;z<n;z++) { int ans(1); cin>>a0>>a1>>b0>>b1; trans(b1,B1); // for (int j=1;j<=B1[0].n;j++) // cout<<B1[j].n<<" "<<B1[j].num<<endl; for(int i=1;i<=B1[0].n;i++) { int fac(B1[i].n); int pa0(ind(a0,fac)),pa1(ind(a1,fac)), pb0(ind(b0,fac)),pb1(B1[i].num); //cout<<pa0<<" "<<pa1<<" "<<pb0<<" "<<pb1<<endl; if(pa0==pa1) { if(pb0==pb1) ans*=pb1-pa1+1; if(pb0<pb1&&pa0>pb1) {ans=0;break;} } else { if(pb0<pb1&&pa1!=pb1) {ans=0;break;} if(pb0==pb1&&pa1>pb1) {ans=0;break;} } } cout<<ans<<endl; } return 0; } /************************************************************** Problem: 2289 User: admin Language: C++ Result: Accepted Time:311 ms Memory:2296 kb ****************************************************************/