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