纯粹的数学推理题。。。找到思路后代码实现还是不难的。
注意不要开long long。。。不然会TLE一个点
思路:https://zzlzk.blog.luogu.org/solution-p1072
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define ll long long
using namespace std;
int a0,a1,b0,b1;
int t;
int gcd(int x,int y)
{
if(x<y) swap(x,y);
if(y==0) return x;
return gcd(y,x%y);
}
inline int getint()
{
char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
int ans=0;
while(ch>='0'&&ch<='9')
{
ans=ans*10+ch-'0';
ch=getchar();
}
return ans;
}
int main()
{
scanf("%d",&t);
while(t--)
{
a0=getint();
a1=getint();
b0=getint();
b1=getint();
//scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
int ans=0;
int p=a0/a1,q=b1/b0;
for(int i=1;i<=sqrt(b1);i++)
{
if(b1%i==0)
{
if(i%a1==0&&gcd(i/a1,p)==1&&gcd(q,b1/i)==1) ans++;
int y=b1/i;
if(i==y) continue;
if(y%a1==0&&gcd(y/a1,p)==1&&gcd(q,b1/y)==1) ans++;
}
}
printf("%d\n",ans);
}
return 0;
}