C. Finite or not? Codeforces Round #483 (Div. 2)該進位制下的分數是不是有限迴圈小數。
阿新 • • 發佈:2018-12-29
/*
判斷該進位制下的分數是不是有限迴圈小數。
方法:
將分子分母化為最簡,判斷分母在該進位制下是否能化掉
因為由十進位制小數化為其他進位制小數的經驗可以看出來
該小數不斷乘以一個數取整數位,最後將小數化為0
取出來的個整數位即為該進位制下的小數表示,所以由此可知
該分數不斷乘以這個進位制數,如果分母最後能消掉,則
該進位制下的分數是有限迴圈小數。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
int main(){
ll n,p,q,d;
while(scanf("%I64d",&n)!=EOF){
while(n--){
scanf("%I64d%I64d%I64d",&p,&q,&d);
if(p==0)
printf("Finite\n");
else{
ll t=gcd(p,q);
p/=t;
q/=t;
if (q==1)
printf("Finite\n");
else{
ll t;
while((t=gcd(q,d))!=1){
while(q%t==0){
q/=t;
}
}
if(q==1)
printf ("Finite\n");
else
printf("Infinite\n");
}
}
}
}
return 0;
}