1. 程式人生 > >CF-Codeforces Round #483 (Div. 2)-C-Finite or not?

CF-Codeforces Round #483 (Div. 2)-C-Finite or not?

ACM模版

描述

這裡寫圖片描述

題解

首先求 pq 的最大公約數,為了在十進位制下約分,此時我們先考慮十進位制的情況什麼條件才能有限,最簡分數 ab 能化為有限小數的充要條件是分母 b 不含有 25 以外的質因數,那麼我們可以嘗試猜一下,pqb 進位制下想要有限的充要條件是 q 不含 b 拆解後的質因數以外的質因數。所以此時我們無需考慮 p,只用不斷去除 q 中的 b 的質因子,如果可以最後把 q 拆解成 1 那麼就是有限,否則無限。

程式碼

#include <iostream>
#include <cstdio>
#include <cstring> #include <algorithm> using namespace std; typedef long long ll; int n; ll gcd(ll x, ll y) { if (!x || !y) { return x > y ? x : y; } for (ll t; static_cast<void>(t = x % y), t; x = y, y = t) ; return y; } int main(int argc, const
char * argv[]) { cin >> n; while (n--) { ll p, q, b; scanf("%lld%lld%lld", &p, &q, &b); if (p == 0) { puts("Finite"); continue; } ll g = gcd(p, q); q /= g; p /= g; while (q > 1
) { g = gcd(q, b); if (g == 1) { break; } while (q % g == 0) { q /= g; } } if (q == 1) { puts("Finite"); } else { puts("Infinite"); } } return 0; }