結果
問題 |
No.2902 ZERO!!
|
ユーザー |
|
提出日時 | 2024-09-28 02:21:22 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 216 ms / 2,000 ms |
コード長 | 1,137 bytes |
コンパイル時間 | 518 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 90,184 KB |
最終ジャッジ日時 | 2024-09-28 02:21:29 |
合計ジャッジ時間 | 5,636 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 41 |
ソースコード
## https://yukicoder.me/problems/no/2902 MOD = 998244353 def main(): N = int(input()) # 2以上N以下の素数を列挙 primes = [True] * (N + 1) for p in range(2, N + 1): if not primes[p]: continue x = 2 * p while x <= N: primes[x] = False x += p # N! に含まれる素数p の最大の肩を計算 primes_array = [] for p in range(2, N + 1): if not primes[p]: continue x = p cnt = 0 while x <= N: cnt += N // x x *= p primes_array.append((p, cnt)) primes_array.sort(key=lambda x : x[1], reverse=True) # 答えを計算 answer = 0 max_x = primes_array[0][1] for p in range(1, max_x + 1): a = 1 for i in range(len(primes_array)): _, c = primes_array[i] if c < p: break x = c // p a *= (x + 1) a %= MOD a -= 1 a %= MOD answer += a answer %= MOD print(answer) if __name__ == "__main__": main()