概要

floor sum は以下の値を求めるアルゴリズムである。

$$ \displaystyle f(N, M, A, B) = \sum_{k=0}^{N-1}\left\lfloor \frac{Ak + B}{M}\right\rfloor $$

制約

ACL に入ってる。計算量は $O(\log M)$ である。

導出

image.jpeg

主客転倒の部分を図にすると以下のようになる。

image.png

導出に使う考え方

ベースとなる考え方はあまりを取って主客転倒する。

すると、ユークリッドの互除法のノリで $A$ と $M$ の値がどんどん考える値が小さくなる。

あまりを取って主客転倒して辻褄が合うように導出しようとしたら自動的に導出される。なんかいい感じにピースがハマる感じ

細かいテクニックは以下の通り