arithmetic_progression

ソースコード

from titan_pylib.algorithm.arithmetic_progression import ArithmeticProgression

view on github

展開済みコード

 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)

仕様

class ArithmeticProgression(a: int, d: int)[source]

Bases: object

__getitem__(k: int) int[source]

0-indexed.

index(v: int) int[source]

vが先頭から何番目か(0-indexed)

pref(n: int) int[source]

先頭n項の和.

sum(l: int, r: int) int[source]

[l, r)