結果
問題 |
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()