题目描述很简单,就是要求我们计算 ∑ i = 1 n i × A m o d B \sum\limits_{i=1}^ni×A\ {\rm mod}\ B i=1∑ni×A mod B,但是仔细思考会发现 ∑ i = 1 n i × A m o d B ≠ ( ∑ i = 1 n i × A ) m o d B \sum\limits_{i=1}^ni×A\ {\rm mod}\ B≠\left(\sum\limits_{i=1}^ni×A\right)\ {\rm mod}\ B i=1∑ni×A mod B=(i=1∑ni×A) mod B,但是根据取模的实质可以知道 ∑ i = 1 n i × A m o d B = ∑ i = 1 n i × A − ∑ i = 1 n ⌊ i × A B ⌋ × B \sum\limits_{i=1}^ni×A\ {\rm mod}\ B=\sum\limits_{i=1}^ni×A-\sum\limits_{i=1}^n\left\lfloor\frac{i×A}{B}\right\rfloor×B i=1∑ni×A mod B=i=1∑ni×A−i=1∑n⌊Bi×A⌋×B,现在的问题就是如何求出 ∑ i = 1 n ⌊ i × A B ⌋ \sum\limits_{i=1}^n\left\lfloor\frac{i×A}{B}\right\rfloor i=1∑n⌊Bi×A⌋,下面将给出应该能看懂的推导。
本题难在求公差为1的等差数列乘一个数再除以一个数向下取整的和,写成公式:
∑ i = 1 n ⌊ i × q p ⌋ \sum_{i=1}^n\left\lfloor\frac{i×q}{p}\right\rfloor i=1∑n⌊pi×q⌋
直接变换公式好像没什么用,那么我们就尝试将其转换到笛卡尔坐标系中来看(不要问怎么想到的,这是别人给我讲的,应该是一个技巧吧),那么对于一个点 ( i , i × q p ) (i,\frac{i×q}{p}) (i,pi×q), ⌊ i × q p ⌋ \left\lfloor\frac{i×q}{p}\right\rfloor ⌊pi×q⌋的值就转换成了点 ( i , 0 ) (i,0) (i,0)到点 ( i , i × q p ) (i,\frac{i×q}{p}) (i,pi×q)之间有多少个整点。那么对于给定的 n , q , p n,q,p n,q,p,答案就变成了求出由直线 y = q p x , x = n , y = 0 y=\frac{q}{p}x,x=n,y=0 y=pqx,x=n,y=0三条直线所围成的一个直角三角形中有多少个整点( y = q p x , x = n y=\frac{q}{p}x,x=n y=pqx,x=n上的整点也要计入答案, y = 0 y=0 y=0上的整点不计入答案),例如当 n = 4 ,