arithmetic_progression¶
ソースコード¶
from titan_pylib.algorithm.arithmetic_progression import ArithmeticProgression
展開済みコード¶
1# from titan_pylib.algorithm.arithmetic_progression import ArithmeticProgression
2class ArithmeticProgression:
3
4 def __init__(self, a: int, d: int) -> None:
5 """
6 Args:
7 a (int): 初項です。
8 d (int): 公差です。
9 """
10 self.a = a
11 self.d = d
12
13 def __getitem__(self, k: int) -> int:
14 """0-indexed."""
15 assert k >= 0
16 return self.a + k * self.d
17
18 def index(self, v: int) -> int:
19 """vが先頭から何番目か(0-indexed)"""
20 v -= self.a
21 assert v % self.d == 0
22 i = v // self.d
23 assert i >= 0
24 return i
25
26 def pref(self, n: int) -> int:
27 """先頭n項の和."""
28 if n < 0:
29 return 0
30 return (self[0] + self[n - 1]) // 2 * n
31
32 def sum(self, l: int, r: int) -> int:
33 """[l, r)"""
34 return self.pref(r) - self.pref(l - 1)