luogu P1072 Hankson的趣味题
题目链接
题解
啊,还是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\n",ans);
}
return 0;
}