結果
| 問題 | No.3505 Sum of Prod of Root |
| コンテスト | |
| ユーザー |
YuukunA
|
| 提出日時 | 2026-04-19 00:28:32 |
| 言語 | Python3 (3.14.3 + numpy 2.4.4 + scipy 1.17.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,536 bytes |
| 記録 | |
| コンパイル時間 | 511 ms |
| コンパイル使用メモリ | 20,952 KB |
| 実行使用メモリ | 164,988 KB |
| 最終ジャッジ日時 | 2026-04-19 00:29:00 |
| 合計ジャッジ時間 | 7,529 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 1 |
| other | AC * 4 TLE * 1 -- * 8 |
ソースコード
import math
MOD = 998244353
INV2 = pow(2, MOD - 2, MOD)
INV6 = pow(6, MOD - 2, MOD)
INV30 = pow(30, MOD - 2, MOD)
def icbrt(n):
x = int(round(n ** (1 / 3)))
while (x + 1) ** 3 <= n:
x += 1
while x ** 3 > n:
x -= 1
return x
def sum2(n):
n %= MOD
return n * (n + 1) % MOD * (2 * n + 1) % MOD * INV6 % MOD
def sum3(n):
n %= MOD
s = n * (n + 1) % MOD * INV2 % MOD
return s * s % MOD
def sum4(n):
n %= MOD
return n * (n + 1) % MOD * (2 * n + 1) % MOD * (3 * n * n + 3 * n - 1) % MOD * INV30 % MOD
def F(n):
if n <= 0:
return 0
t = math.isqrt(n)
m = t - 1
full = (2 * sum4(m) + 3 * sum3(m) + sum2(m)) % MOD
l = t * t
tail = t % MOD
tail = tail * ((l + n) % MOD) % MOD
tail = tail * ((n - l + 1) % MOD) % MOD
tail = tail * INV2 % MOD
return (full + tail) % MOD
def range_sum(L, R):
return (F(R) - F(L - 1)) % MOD
N = int(input())
c = icbrt(N)
inv = [0] * (c + 1)
inv[1] = 1
for i in range(2, c + 1):
inv[i] = MOD - (MOD // i) * inv[MOD % i] % MOD
events = {}
for a in range(2, c + 1):
ratio = a * inv[a - 1] % MOD
x = a * a * a
while x <= N:
events[x] = events.get(x, 1) * ratio % MOD
if x > N // a:
break
x *= a
ans = 0
cur = 1
prev = 1
for x in sorted(events):
if prev <= x - 1:
ans = (ans + cur * range_sum(prev, x - 1)) % MOD
cur = cur * events[x] % MOD
prev = x
if prev <= N:
ans = (ans + cur * range_sum(prev, N)) % MOD
print(ans)
YuukunA