暑假集训Day13 H (进制转换 数学)

题目链接在这里: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 }
未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
原文地址:https://www.cnblogs.com/keximeiruguo/p/15068631.html