题目链接在这里:Problem - H - Codeforces
这题涉及到小数的进制转换,我们知道小数的十进制进制转换就是不断拿十进制乘以要转换的进制数,然后取整数部分。
这里要判断是否是有限小数,也就是说,要让这个十进制小数在乘上若干个进制数之后,只有整数,再换个表述就是分数p/q要让这个分数乘上若干个b之后能把分母q消去
1 #include "bits/stdc++.h" 2 using namespace std; 3 typedef long long LL; 4 LL a,b,c,t; 5 LL gcd(LL x,LL y){return (y==0?x:gcd(y,x%y));} 6 void calc(LL x){while (b%x==0) b/=x;} 7 int main(){ 8 freopen ("h.in","r",stdin); 9 freopen ("h.out","w",stdout); 10 int i,j;LL g,zt; 11 scanf("%lld",&t); 12 while (t--){ 13 scanf("%lld%lld%lld",&a,&b,&c); 14 g=gcd(a,b); 15 b/=g; 16 if (c%b==0){ 17 printf("Finite "); 18 continue; 19 } 20 //bool flag=true; 21 while (zt=gcd(b,c),zt!=1) calc(zt); 22 if (b==1) printf("Finite "); 23 else printf("Infinite "); 24 } 25 return 0; 26 }