結果

問題 No.2829 GCD Divination
コンテスト
ユーザー wasd314
提出日時 2026-09-16 11:28:34
言語 PyPy3
(7.3.23 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 86 ms / 2,000 ms
+ 784µs
コード長 892 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 74 ms
コンパイル使用メモリ 81,424 KB
実行使用メモリ 84,768 KB
最終ジャッジ日時 2026-09-16 11:28:39
合計ジャッジ時間 3,995 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 35
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

from functools import cache


@cache
def factorize(n: int):
    pe = {}
    for p in range(2, n):
        if p * p > n:
            break
        if n % p == 0:
            e = 0
            while n % p == 0:
                n //= p
                e += 1
            pe[p] = e
    if n > 1:
        pe[n] = 1
    return pe


@cache
def totient(n: int):
    ans = n
    for p in factorize(n):
        ans //= p
        ans *= p - 1
    return ans


def get_divisors(n: int):
    pe = factorize(n)
    ans = [1]
    for p, e in pe.items():
        exps = [p**ei for ei in range(1, e + 1)]
        ans.extend([d * f for d in ans for f in exps])
    ans.sort()
    return ans


@cache
def solve(n: int):
    if n == 1:
        return 0.0
    ans = sum(solve(d) * totient(n // d) for d in get_divisors(n) if d != n)
    ans += n
    ans /= n - 1
    return ans


n = int(input())
print(solve(n))
0