結果
| 問題 | No.3505 Sum of Prod of Root |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-04-18 00:52:00 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,831 bytes |
| 記録 | |
| コンパイル時間 | 315 ms |
| コンパイル使用メモリ | 84,992 KB |
| 実行使用メモリ | 166,144 KB |
| 最終ジャッジ日時 | 2026-04-18 00:52:10 |
| 合計ジャッジ時間 | 3,918 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 1 |
| other | AC * 2 WA * 11 |
ソースコード
import sys
import math
def solve():
input_data = sys.stdin.read().split()
if not input_data:
return
N = int(input_data[0])
MOD = 998244353
inv2 = 499122177
inv6 = 166374059
inv30 = 898419918
def F(X):
if X <= 0: return 0
M = math.isqrt(X)
n = (M - 1) % MOD
S2 = n * (n + 1) % MOD * (2 * n + 1) % MOD * inv6 % MOD
v = n * (n + 1) % MOD * inv2 % MOD
S3 = v * v % MOD
S4 = n * (n + 1) % MOD * (2 * n + 1) % MOD * (3 * n * n % MOD + 3 * n - 1) % MOD * inv30 % MOD
ans = (2 * S4 + 3 * S3 + S2) % MOD
X_mod = X % MOD
M2_mod = (M % MOD) * (M % MOD) % MOD
rem_sum = (X_mod + M2_mod) * (X_mod - M2_mod + 1 + MOD) % MOD * inv2 % MOD
ans = (ans + (M % MOD) * rem_sum) % MOD
return ans
MAX_INV = 1000005
inv = [0] * MAX_INV
inv[1] = 1
for i in range(2, MAX_INV):
inv[i] = MOD - (MOD // i) * inv[MOD % i] % MOD
events = []
for k in range(3, 60):
x = 2
while True:
v = x ** k
if v > N:
break
events.append((v, x))
x += 1
events.sort(key=lambda item: item[0])
curr_v = 1
ans = 0
H = 1
idx = 0
L = len(events)
while idx < L:
v = events[idx][0]
if v > curr_v:
val = (F(v - 1) - F(curr_v - 1)) % MOD
ans = (ans + H * val) % MOD
curr_v = v
while idx < L and events[idx][0] == v:
x = events[idx][1]
H = H * x % MOD * inv[x - 1] % MOD
idx += 1
if curr_v <= N:
val = (F(N) - F(curr_v - 1)) % MOD
ans = (ans + H * val) % MOD
print((ans % MOD + MOD) % MOD)
if __name__ == '__main__':
solve()