一个分数是否可以除尽
首先约分,1/2, 1/125可以除尽的原因是:十进制10=2*5->1/2,1000=2^3*5^3->1/125也就是10包括了2,125的所有质因数
b进制下,分母q是有限小数的充分条件是b有q的所有质因数
因此,这个问题就转化为了:
求b是否包含了q的所有质因子
一般是想到全部罗列再比较(超时),
这里就可以用gcd的办法,找出两者gcd如果gcd可以整除q,则b包所有q的质因子
——这里还可以优化下,就是b的除gcd以外的因子都没有用所有所以b=gcd
代码
#include <bits/stdc++.h>
using namespace std;
long long n,g,p,q,b;
long long gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int main(int argc, char** argv) {
scanf("%lld",&n);
while(n--){
scanf("%lld%lld%lld",&p,&q,&b);
q/=gcd(p,q);
while(1){
// g=gcd(q,b);//未优化
// while(q%g==0){
// q/=g;
// }
b=gcd(q,b);
if(b==1){
if(q==1) puts("Finite");
else puts("Infinite");
break;
}
while(q%b==0){
q/=b;
}
}
}
return 0;
} 
京公网安备 11010502036488号