# C. Finite or not?+质因子

C. Finite or not?
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

You are given several queries. Each query consists of three integers p

, q and b. You need to answer whether the result of p/q in notation with base b

is a finite fraction.

A fraction in notation with base b

is finite if it contains finite number of numerals after the decimal point. It is also possible that a fraction has zero numerals after the decimal point.

Input

The first line contains a single integer n

(1n105

) — the number of queries.

Next n

lines contain queries, one per line. Each line contains three integers p, q, and b (0p1018, 1q1018, 2b1018). All numbers are given in notation with base 10

.

Output

For each question, in a separate line, print Finite if the fraction is finite and Infinite otherwise.

Examples
Input
Copy
2
6 12 10
4 3 10
Output
Copy
Finite
Infinite
Input
Copy
4
1 1 2
9 36 2
4 12 3
3 5 4
Output
Copy
Finite
Finite
Finite
Infinite
Note

612=12=0,510

43=1,(3)10

936=14=0,012

412=13=0,13

#define happy

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define all(a) (a).begin(),(a).end()
#define pll pair<ll,ll>
#define vi vector<int>
#define pb push_back
const int inf=0x3f3f3f3f;
ll rd(){
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}

ll gcd(ll a,ll b){
if(!b)return a;
return gcd(b,a%b);
}

bool finite(ll q,ll base){
while(q!=1){
ll x=gcd(q,base);
if(x==1)return false;
//cout<<x<<endl;
while(x<numeric_limits<int32_t>::max()/2)x*=x;
x=gcd(q,x);
q/=x;
}
return true;
}

int main(){
#ifdef happy
freopen("in.txt","r",stdin);
#endif
ll n=rd();
while(n--){
ll q=rd(),p=rd(),b=rd();
ll x=gcd(p,q);
printf("%s\n",finite(p/x,b)?"Finite" : "Infinite");
}
}

• 广告
• 抄袭
• 版权
• 政治
• 色情
• 无意义
• 其他

120