题解
2023-03-04 17:47:33
发布于:上海
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
int main()
{
int n;
cin >> n;
while (n-- > 0)
{
int a0, a1, b0, b1, ans = 0;
cin >> a0 >> a1 >> b0 >> b1;
int p = a0 / a1, q = b1 / b0;
for (int i = 1; i <= sqrt(b1); i++)
if (b1 % i == 0)
{
if ((i % a1 == 0) && (gcd(i / a1, p) == 1) && (gcd(q, b1 / i) == 1))
ans++;
int j = b1 / i;
if (i == j)
continue;
if ((j % a1 == 0) && (gcd(j / a1, p) == 1) && (gcd(q, b1 / j) == 1))
ans++;
}
cout << ans << endl;
}
return 0;
}
全部评论 5
法姐,请受徒儿一拜(看过法姐多项评论)
2024-10-11 来自 甘肃
0你当前的解法已经相当不错了,特别是考虑到你使用了最大公约数(GCD)的概念来简化问题,并且有效地利用了因子对来遍历可能的解。(AC助手的原话)
2024-09-02 来自 山东
0法姐,请受徒儿一拜(看过法姐多项评论)
2024-09-02 来自 山东
0法姐,请受徒儿一拜(看过法姐多项评论)
2024-04-21 来自 重庆
0法姐,请受徒儿一拜(看过法姐多项评论)
2024-03-03 来自 浙江
0
有帮助,赞一个