結果
| 問題 |
No.752 mod数列
|
| コンテスト | |
| ユーザー |
maspy
|
| 提出日時 | 2020-01-22 21:48:28 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 792 ms / 2,000 ms |
| コード長 | 957 bytes |
| コンパイル時間 | 87 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 55,404 KB |
| 最終ジャッジ日時 | 2024-07-16 02:41:02 |
| 合計ジャッジ時間 | 23,831 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 31 |
ソースコード
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
import numpy as np
P,Q = map(int, readline().split())
m = map(int,read().split())
LR = zip(m,m)
M = 30000
low_max = P//(M+1)
if low_max < 0:
low_max = 0
lower = np.cumsum(P % np.arange(low_max + 1, dtype=np.int64))
left = P // np.arange(1, M+2, dtype=np.int64)
right = P // np.arange(0, M+1, dtype=np.int64)
S = (right - left) * (right + left + 1) // 2
upper = P * (right - left) - np.arange(M+1, dtype=np.int64) * S
upper[0] = 0
upper = upper[::-1].cumsum()[::-1]
lower = lower.tolist()
upper = upper.tolist()
upper.append(0)
def F(N):
if N <= low_max:
return lower[N]
if N > P:
return upper[0] + lower[-1] + (N - P) * P
n = P // N
x = lower[-1] + upper[n+1] # 商 n+1 以上
L = P // (n+1)
return x + P * (N - L) - (N - L) * (N + L + 1) // 2 * n
for L,R in LR:
print(F(R) - F(L-1))
maspy