【cf 483 div2 -C】Finite or not?(数论)
链接: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 == 0) 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!=1) { a = gcd(b, q); if(a == 1) break; while(q%a==0) { q /= a; } } if(q!=1) puts("Infinite"); else puts("Finite"); } return 0; }