您的位置:首页 > 其它

[luoguP1072] Hankson 的趣味题(数论)

2017-06-20 15:03 134 查看

传送门

 

由题意得

  • 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 的倍数却不对

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: