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)