Codeforces ~ 983A ~ Finite or not?(思维,分数在b进制下是否为无限小数)
题意
N组测试数据,每组有三个数p,q,b,问在b进制下是否为无限小数?
思路
首先,一个最简分数是不是无限小数跟分子无关,只跟分母有关。
在b进制下,如果那么就是一个有限小数,否则就是无限小数。
,那么的素因子应该是的子集。我们做迭代,如果迭代之后,那么分数就是无限小数,否则就是有限小数。但是这样做复杂度为会超时。
我们上述方法中加入,不会影响答案,但是复杂度变为,就能过了。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
LL p, q, b;
scanf("%lld%lld%lld", &p, &q, &b);
LL G = __gcd(p, q);
p /= G, q /= G;
while (1)
{
LL g = __gcd(b, q);
if (g == 1)
break;
b = g, q /= g;
}
if (p == 0 || q == 1)
puts("Finite");
else
puts("Infinite");
}
return 0;
}
/*
2
6 12 10
4 3 10
*/