以下是证明(建议手推一遍,助于理解)
证明:
结论
对于两个正整数 a,b设 gcd(a,b)=k则存在 gcd(a/k,b/k)=1
得出这两个结论
我们发现b1%x==0&&x%a1==0&&满足两个式子时成立
//数学题
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int t,a0,a1,b0,b1;
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
cin>>t;
while(t--)
{
cin>>a0>>a1>>b0>>b1;
int ans=0;
for(int x=1;x*x<=b1;x++)
{
if(b1%x==0)
{
if(x%a1==0&&gcd(x/a1,a0/a1)==1&&gcd(b1/b0,b1/x)==1) ans++;
int y=b1/x;//枚举另一个因子
if(y==x) continue;
if(y%a1==0&&gcd(y/a1,a0/a1)==1&&gcd(b1/b0,b1/y)==1) ans++;
}
}
cout<<ans<<endl;
}
}
/*
没看题解第一次打暴力得了50
//50'
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int t,a,b,c,d;
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
cin>>t;
while(t--)
{
cin>>a>>b>>c>>d;
int ans=0;
for(int x=1;x<=d;x++)
{
int sum1=gcd(x,a),sum2=gcd(x,c);
int q=x/sum2,w=c/sum2;
if(b==sum1&&d==q*w*sum2) ans++;
}
cout<<ans<<endl;
}
}
*/
像您这样长得帅又能AK NOI并且还点赞关注的人已经不多了