結果
問題 | No.2211 Frequency Table of GCD |
ユーザー |
![]() |
提出日時 | 2023-02-11 13:18:55 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 392 ms / 2,000 ms |
コード長 | 1,107 bytes |
コンパイル時間 | 262 ms |
コンパイル使用メモリ | 82,272 KB |
実行使用メモリ | 103,020 KB |
最終ジャッジ日時 | 2024-07-08 03:06:00 |
合計ジャッジ時間 | 8,331 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 26 |
ソースコード
def isqrt(n):if n <= 0:return 0x = int((n ** 0.5) * (1 + 1e-14))while True:y = (x + n // x) // 2if y >= x:return xx = ydef smf_sieve(N):v = isqrt(N)assert v * v <= N < (v + 1) * (v + 1)smf = list(range(N + 1))for d in range(2, N + 1, 2):smf[d] = 2for p in range(3, v + 1, 2):if smf[p] != p:continuefor d in range(p * p, N + 1, 2 * p):if smf[d] == d:smf[d] = preturn smfN, M = map(int, input().split())A = map(int, input().split())mod = 998244353C = [0] * (M + 1)smf = smf_sieve(M)for a in A:a0 = adivs = [1]while a > 1:p = smf[a]r = [1]while smf[a] == p:a //= pr.append(r[-1] * p)divs = [d * q for d in divs for q in r]for d in divs:C[d] += 1C = [pow(2, c, mod) - 1 for c in C]M1 = M + 1for i in range(M // 2, 0, -1):tmp = C[i]for n in range(i + i, M1, i):tmp -= C[n]C[i] = tmp % modfor c in C[1:]:print(c)