結果

問題 No.2249 GCDistance
ユーザー okapin
提出日時 2023-03-17 23:30:35
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 732 bytes
コンパイル時間 171 ms
コンパイル使用メモリ 82,048 KB
実行使用メモリ 243,072 KB
最終ジャッジ日時 2024-09-18 12:32:30
合計ジャッジ時間 12,917 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample TLE * 1
other -- * 10
権限があれば一括ダウンロードができます

ソースコード

diff #

A = 10**7
sieve = [i for i in range(A+1)]
p = 2
while p*p <= A:
    if sieve[p] == p:
        for q in range(2*p, A+1, p):
            if sieve[q] == q:
                sieve[q] = p
    p += 1

dp = [0]*(A+1)
for i in range(2, A+1):
    prime = set()
    orig = i
    while i > 1:
        prime.add(sieve[i])
        i //= sieve[i]

    res = 0
    prime = list(prime)
    l = len(prime)
    for bit in range(1, 1 << l):
        tmp = 1
        c = 1
        for j in range(l):
            if (bit >> j) & 1:
                tmp *= prime[j]
                c = (c+1) % 2
        res += orig//(tmp*(-1)**c)
    res -= 1

    dp[orig] = dp[orig-1]+orig-1+res

t = int(input())
for _ in range(t):
    n = int(input())
    print(dp[n])
0