给定三个整数 p,q,b,请你计算十进制表示下的 p/q 的结果在 b 进制下是否为有限小数。
例:
输入
2
6 12 10
4 3 10
输出
YES
NO
输入
4
1 1 2
9 36 2
4 12 3
3 5 4
输出
YES
YES
YES
NO
思路:
1. 通分c = p / q
为最简形式
- 若
c = p' / q'
在b
进制下是有限小数,意味着bx % q == 0
,即q的所有因子包含在b
中
static void solve() {
int T = ni();
while (T-- > 0) {
long p = nl(), q = nl(), b = nl();
q /= gcd(p, q);
long g = b;
while(q != 1) {
g = gcd(g, q);
if(g == 1) break;
while(q % g == 0) q /= g;
}
if(q == 1) out.println("YES");
else out.println("NO");
}
}
static long gcd(long a, long b) {
return b == 0 ? a : gcd(b, a % b);
}