题目链接
题解
啊,还是noip的题好做
额,直接推式子就好了
(gcd(x,a_0)=a_1=gcd(frac{x}{a_1},frac{a_0}{a_1}))
额....上面这个式子似乎没用,看b的
(lcm(x,b_0)=frac{x*b_0}{gcd(x,b_0)}=b1)
那么(gcd(x,b_0)=frac{x*b_0}{b_1})
(gcd(frac{b_1}{b_0},frac{b_1}{x})=1)
显然(x,b_0)为(b_1)约数且(frac{b_1}{b_0},frac{b_1}{x})互质
枚举(b_1)的约数判断是否满足条件
复杂度(O(sqrt{n}))
代码
// luogu-judger-enable-o2
#include<cstdio>
#include<algorithm>
using std::__gcd;
int main() {
int a;
scanf("%d",&a);
for(int a0,a1,b0,b1,ans;a--;) {
ans=0;
scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
for(int x=1;x*x<=b1;x++)
if(!(b1%x)) {
if(__gcd(x,a0)==a1&&__gcd(b1/x,b1/b0)==1) ans++;
if(x*x==b1) continue;
int y=b1/x;
if(__gcd(y,a0)==a1&&__gcd(b1/y,b1/b0)==1) ans++;
}
printf("%d
",ans);
}
return 0;
}