题目:
题解:
#include <bits/stdc++.h>
using namespace std;
const int N=45000;
int pri[N],primes[N];
int con,conf,cond;
typedef pair<int,int> pll;
pll f[N];
int yueshu[N];
void prime()
{
for(int i=2;i<=N;i++)
{
if(!pri[i]) primes[++con]=i;
for(int j=1;primes[j]<=N/i;j++)
{
pri[primes[j]*i]=1;
if(i%primes[j]==0) break;
}
}
}
long long gcd(long long a,long long b)
{
return b==0?a:gcd(b,a%b);
}
void dfs(int u,int p)
{
if(u>conf)
{
yueshu[++cond]=p;
return;
}
for(int i=0;i<=f[u].second;i++)
{
dfs(u+1,p);
p*=f[u].first;
}
}
int main()
{
int n;
cin>>n;
prime();
while(n--)
{
long long a,b,c,d;
cin>>a>>b>>c>>d;
long long m=d;
conf=0;
for(int i=1;primes[i]<=d/primes[i];i++)
{
int p=primes[i];
int s=0;
while(m%p==0)
{
s++;
m/=p;
}
f[++conf]={p,s};
}
if(m>1) f[++conf]={m,1};
cond=0;
dfs(1,1);
long long ans=0;
for(int i=1;i<=cond;i++)
{
int x=yueshu[i];
long long y=x*c;
if(gcd(x,a)==b && y/gcd(x,c)==d)
{
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}