結果
問題 | No.1529 Constant Lcm |
ユーザー |
![]() |
提出日時 | 2021-06-04 20:17:06 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 862 ms / 3,000 ms |
コード長 | 1,254 bytes |
コンパイル時間 | 262 ms |
コンパイル使用メモリ | 82,460 KB |
実行使用メモリ | 97,792 KB |
最終ジャッジ日時 | 2024-11-19 08:28:16 |
合計ジャッジ時間 | 10,439 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 24 |
ソースコード
from collections import defaultdict, Counterfrom itertools import chaindef prime_set(N):"""Nまでの素数のsetを返す"""if N < 4:return ({}, {}, {2}, {2, 3})[N]Nsq = int(N ** 0.5 + 0.5) + 1primes = {2, 3} | set(chain(range(5, N + 1, 6), range(7, N + 1, 6)))for i in range(5, Nsq, 2):if i in primes:primes -= set(range(i * i, N + 1, i * 2))return primesdef prime_sieve(N):#sieve[i] : iの最小の素因数sieve = [0] * (N + 1)prime = []for i in range(2, N + 1):if sieve[i] == 0:sieve[i] = iprime.append(i)for p in prime:if p > sieve[i] or i * p > N:breaksieve[i * p] = preturn sieveN = int(input())mod = 998244353sieve = prime_sieve(N)cnt = defaultdict(int)for x in range(1, N):y = N - xif x > y:breakP = []while sieve[x] != 0:s = sieve[x]P.append(s)x //= swhile sieve[y] != 0:s = sieve[y]P.append(s)y //= sfor k, v in Counter(P).items():cnt[k] = max(cnt[k], v)ans = 1for k, v in cnt.items():ans *= pow(k, v, mod)ans %= modprint(ans)