正如yxc大佬所说,这道题主要难在证明上,特别是证明右端点的大小。(如果你不知道我在说什么,可以去看yxc的视频或其它题解)。
首先,设k=a * l+b,k=a * r+c.
要证r=k/(k/l)。可以设r已知。
根据k=a * r+c,r=(k-c)/a.
所以要证的即为k/(k/l)=(k-c)/a.
因为k=a * l+b.
所以k/l=a.
即k/a下取整=(k-c)/a.
因为k=a * l+b.
所以k/a=l+b/a下取整.
k-c=a * l+b-c.
(k-c)/a=l+(b-c)/a.
代入上式.
l+b/a下取整=l+(b-c)/a
b/a下取整=(b-c)/a
即c=b mod a.
回想r的含义,r是指满足k/i下取整=k/l下取整的最大的i.
因为k=a * l+b,k=a * r+c.
所以c一定是由b减去若干个a得到的.
因为k=a * l+b.
若b中有1个a,则k=a * (l+1)+b-a.
若b中有2个a,则k=a * (l+2)+b-2a.
依次类推,当b-j*a=b mod a=c时.
所得到的r最大.
因此c=b mod a.
证毕.
(感觉写得有点儿凌乱,不过大概指明了方向吧。)
赞