結果
| 問題 |
No.3026 Range LCM (Online Version)
|
| コンテスト | |
| ユーザー |
👑 potato167
|
| 提出日時 | 2025-02-13 21:56:42 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 822 bytes |
| コンパイル時間 | 368 ms |
| コンパイル使用メモリ | 82,348 KB |
| 実行使用メモリ | 202,504 KB |
| 最終ジャッジ日時 | 2025-02-14 01:45:42 |
| 合計ジャッジ時間 | 99,369 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 10 TLE * 22 |
ソースコード
import math
def lcm(a: int, b: int) -> int:
return a // math.gcd(a, b) * b # 乗算前に割ることでオーバーフローを防ぐ
size = (1 << 18)
N = int(input())
A = list(map(int, input().split()))
seg = [1] * (size * 2)
for i in range(N):
seg[i + size] = A[i]
for i in range(size - 1, 0, -1):
seg[i] = lcm(seg[i * 2], seg[i * 2 + 1])
Q = int(input())
F = 1
MOD = 998244353
for i in range(Q):
a, b = map(int, input().split())
l = a * F % MOD
r = b * F % MOD
l %= N
r %= N
if l > r:
l, r = r, l
r += 1
l += size
r += size
res = 1
while l < r:
if l & 1:
res = lcm(res, seg[l])
l += 1
if r & 1:
r -= 1
res = lcm(res, seg[r])
l //= 2
r //= 2
F = res % MOD
print(F)
potato167