結果
問題 |
No.1396 Giri
|
ユーザー |
|
提出日時 | 2025-01-01 15:19:19 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 614 ms / 2,000 ms |
コード長 | 1,131 bytes |
コンパイル時間 | 539 ms |
コンパイル使用メモリ | 82,432 KB |
実行使用メモリ | 96,112 KB |
最終ジャッジ日時 | 2025-01-01 15:19:27 |
合計ジャッジ時間 | 7,010 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 |
ソースコード
## https://yukicoder.me/problems/no/1396 MOD = 998244353 def main(): N = int(input()) # osa-k法による素因数分解 primes = [i for i in range(N + 1)] for p in range(2, N + 1): if p != primes[p]: continue x = 2 * p while x <= N: if x == primes[x]: primes[x] = p x += p # N個全ての最小k公倍数を計算 base_value = {} for a in range(2, N + 1): primes_map = {} while a > 1: p = primes[a] if p not in primes_map: primes_map[p] = 0 a //= p primes_map[p] += 1 for p, cnt in primes_map.items(): if p not in base_value: base_value[p] = cnt else: base_value[p] = max(base_value[p], cnt) max_p = max(base_value.keys()) answer = 1 for p, cnt in base_value.items(): answer *= pow(p, cnt, MOD) answer %= MOD answer *= pow(max_p, MOD - 2, MOD) answer %= MOD print(answer) if __name__ == "__main__": main()