Link
Solve
我们要分析一下gcd的一个性质
证明
把上面的结论推广一下,得到结论(P)
对于两个正整数(a,b),设(gcd(a,b)=k),则存在(gcd(a/k,b/k)=1)
应用结论(P)
用心体会这两个式子,你会发现(x)是(a_1)的整数倍而且是(b_1)的因子
好像这个由gcd和lcm也可以得到?嗯,就这样
于是得到一种解题思路
Code
#include<cstdio>
using namespace std;
int gcd(int a,int b) {
return b==0?a:gcd(b,a%b);
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
int a0,a1,b0,b1;
scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
int p=a0/a1,q=b1/b0,ans=0;
for(int x=1;x*x<=b1;x++)
if(b1%x==0){
if(x%a1==0&&gcd(x/a1,p)==1&&gcd(q,b1/x)==1) ans++;
int y=b1/x;//得到另一个因子
if(x==y) continue;
if(y%a1==0&&gcd(y/a1,p)==1&&gcd(q,b1/y)==1) ans++;
}
printf("%d
",ans);
}
return 0;
}