[luoguP1072] Hankson 的趣味题(数论)
由题意得
- gcd(x, a0) = a1 ——> gcd(x / a1, a0 / a1) = 1
- lcm(x, b0) = b1 ——> x * b0 / gcd(x, b0) = b1 ——> gcd(x, b0) = x * b0 / b1 ——> gcd(b1 / b0, b1 / x) = 1
那么只需要枚举 b1 的因子并判断即可
#include <cstdio>
#include <iostream>
int n, a0, a1, b0, b1, ans;
inline int gcd(int x, int y)
{
return !y ? x : gcd(y, x % y);
}
inline bool check(int x)
{
return gcd(x / a1, a0 / a1) == 1 && gcd(b1 / b0, b1 / x) == 1;
}
int main()
{
int i, j;
scanf("%d", &n);
while(n--)
{
scanf("%d %d %d %d", &a0, &a1, &b0, &b1);
ans = 0;
for(i = 1; i * i <= b1; i++)
if(!(b1 % i))
{
if(!(i % a1)) ans += check(i);
if((j = b1 / i) ^ i && !(j % a1)) ans += check(j);
}
printf("%d\n", ans);
}
return 0;
}
不知道为什么我枚举 a1 的倍数却不对

浙公网安备 33010602011771号