結果
| 問題 | No.2829 GCD Divination |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-07-20 18:10:05 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 82 ms / 2,000 ms |
| + 635µs | |
| コード長 | 782 bytes |
| 記録 | |
| コンパイル時間 | 466 ms |
| コンパイル使用メモリ | 96,108 KB |
| 実行使用メモリ | 84,224 KB |
| 最終ジャッジ日時 | 2026-07-20 18:10:11 |
| 合計ジャッジ時間 | 5,754 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 35 |
ソースコード
from collections import defaultdict
def factorize(x):
ans = []
i = 2
while i*i <= x:
if x % i == 0:
c = 0
while x % i == 0:
x //= i
c += 1
ans.append((i,c))
i += 1
if x != 1:
ans.append((x,1))
return ans
N = int(input())
arr = factorize(N)
#print(arr)
L = len(arr)
tmp = [(1,1)]
for p,e in arr:
tmp_ = []
for d,v in tmp:
tmp_.append((d,v))
d *= p
v *= p-1
for _ in range(e):
tmp_.append((d,v))
d *= p
v *= p
tmp = tmp_
phi = {d:v for d,v in tmp}
#print(phi)
dp = {}
dp[1] = 0
divsors = list(phi.keys())
divsors.sort()
for d in divsors[1:]:
dp[d] = d
for d_ in divsors:
if d > d_ and d % d_ == 0:
dp[d] += dp[d_] * phi[d//d_]
dp[d] /= d-1
print(dp[N])