外部サイトへ移動します

リンク先の URL を確認してから開いてください。

別タブで開く

解説

B - One Digit Factorization

作成者 loop0919

テスター mackerel38

配点 200 点

実行時間制限
1.5 秒
メモリ制限
512 MiB

解説

11 桁の素数 2,3,5,72, 3, 5, 7 と非負整数 a,b,c,da, b, c, d を用いて N=2a⋅3b⋅5c⋅7dN = 2^a \cdot 3^b \cdot 5^c \cdot 7^d と表せるか判定すれば良いです。

よって、以下のアルゴリズムが正当です。

  • p=2,3,5,7p = 2, 3, 5, 7 の順に以下を繰り返す。
    • NN が pp で割り切れるあいだ、 N←N÷pN \leftarrow N \div p に更新することを繰り返す。
  • 最終的に N=1N = 1 となれば Yes と、そうでなければ No と答える。

各ケースごとに高々 O(log⁡N)O(\log N) 回の割り算で済むので、この解法は十分高速です。

実装例 (Python3)

def solve(N):
    for p in (2, 3, 5, 7):
        while N % p == 0:
            N //= p

    if N == 1:
        print("Yes")
    else:
        print("No")

T = int(input())
for _ in range(T):
    N = int(input())
    solve(N)

ユーザー解説

ユーザー解説を書く

ユーザー解説はまだありません。