結果
| 問題 |
No.3118 Increment or Multiply
|
| ユーザー |
|
| 提出日時 | 2025-04-19 19:33:15 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,388 bytes |
| コンパイル時間 | 314 ms |
| コンパイル使用メモリ | 12,416 KB |
| 実行使用メモリ | 12,748 KB |
| 最終ジャッジ日時 | 2025-04-19 19:33:24 |
| 合計ジャッジ時間 | 8,088 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 5 WA * 30 |
ソースコード
import sys
import threading
def main():
import sys
data = sys.stdin.read().split()
it = iter(data)
T = int(next(it))
mod = 998244353
out = []
for _ in range(T):
N = int(next(it))
A = int(next(it))
if A == 1:
# f(K) = N - K, sum = N*(N-1)/2
res = (N % mod) * ((N-1) % mod) % mod * pow(2, mod-2, mod) % mod
out.append(str(res))
continue
# Precompute contributions
total_N2 = (N % mod) * (N % mod) % mod
sum_m = 0
sum_PK = 0
P = 1
m = 0
while P <= N:
U = N // P
# Next power
# Watch for overflow: if P > N//A, then P*A > N
if P > N // A:
L = 0
else:
L = N // (P * A)
count = U - L
# sum of m contributions
sum_m = (sum_m + m * (count % mod)) % mod
# sum of P[m] * sum_{K=L+1..U} K
# sumK = U*(U+1)//2 - L*(L+1)//2
sumK = (U * (U + 1) // 2 - L * (L + 1) // 2) % mod
sum_PK = (sum_PK + (P % mod) * sumK) % mod
# next
m += 1
P *= A
# result = N^2 + sum_m - sum_PK
res = (total_N2 + sum_m - sum_PK) % mod
out.append(str(res))
sys.stdout.write("\n".join(out))
if __name__ == '__main__':
main()