链接:http://codeforces.com/contest/984/problem/C
题意
三个数p, q, b, 求p/q在b进制下小数点后是否是有限位。
思路
题意转化为是否q|p*b^x,即看b和q有没有相同的质因子。如果用筛选质因子的话1e18的数会超时,所以每次求出b和q的gcd,再让q/gcd,如果q最后是1那么b和q拥有相同质因子,输出Finite,反之Infinite。
附代码:
#include <bits/stdc++.h>
typedef long long LL;
using namespace std;
LL gcd(LL a, LL b)
{
if(b == ) return a;
return gcd(b, a%b);
}
int main()
{
LL p, q, b, t;
cin>>t;
while(t--)
{
scanf("%lld%lld%lld", &p, &q, &b);
q = q/gcd(p, q);
LL a;
while(q!=)
{
a = gcd(b, q);
if(a == ) break;
while(q%a==)
{
q /= a;
}
}
if(q!=) puts("Infinite");
else puts("Finite");
}
return ;
}