難易度評価

難易度を1〜10段階で評価できます。投票はあとから変更・取り消しできます。

難易度(投票) 未投票 (0票)

投票の分布

まだ投票はありません。

  1. Lv.10票
  2. Lv.20票
  3. Lv.30票
  4. Lv.40票
  5. Lv.50票
  6. Lv.60票
  7. Lv.70票
  8. Lv.80票
  9. Lv.90票
  10. Lv.100票

難易度の目安を見る ↗

ログインして難易度を投票

外部サイトへ移動します

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

別タブで開く

One Digit Factorization

作成者 loop0919

テスター mackerel38

難易度(作成者設定) Lv.2

難易度(投票) 未投票 (0票)

実行時間制限
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)

ユーザー解説

ユーザー解説を書く

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