You are given several queries. Each query consists of three integers pp, qq and bb. You need to answer whether the result of p/qp/q in notation with base bb is a finite fraction.
A fraction in notation with base bb 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.
The first line contains a single integer nn (1≤n≤1051≤n≤105) — the number of queries.
Next nn lines contain queries, one per line. Each line contains three integers pp, qq, and bb (0≤p≤10180≤p≤1018, 1≤q≤10181≤q≤1018, 2≤b≤10182≤b≤1018). All numbers are given in notation with base 1010.
For each question, in a separate line, print Finite if the fraction is finite and Infinite otherwise.
2 6 12 10 4 3 10
Finite Infinite
4 1 1 2 9 36 2 4 12 3 3 5 4
Finite Finite Finite Infinite
612=12=0,510612=12=0,510
43=1,(3)1043=1,(3)10
936=14=0,012936=14=0,012
412=13=0,13
#include<iostream>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<map>
#include<string>
#include<stdio.h>
#include<vector>
#include<string>
#include<time.h>
#include<stack>
using namespace std;
#define LL long long int
#define mod 1000000007
#define MAX(x, y) (x) > (y) ? (x) : (y)
using namespace std;
int n;
int m;
int dir[8][2] = { 1,0,0,1,-1,0,0,-1,1,1,-1,1,1,-1,-1 ,-1 };
LL gcd(LL a, LL b) {
return b == 0 ? a : gcd(b, a%b);
}
int main()
{
ios::sync_with_stdio(false);
int n;
LL a, b, c;
cin >> n;
while (n--) {
cin >> a >> b >> c;
LL g = gcd(a, b);
a /= g;
b /= g;
while (b != 1 && c != 1) {
c = gcd(b, c);
b /= c;
}
if (b==1) {
cout << "Finite" << endl;
}
else {
cout << "Infinite" << endl;
}
}
return 0;
}