对于一个数 ddd,若区间 [l,r][l,r][l,r] 中存在多于一个数是 ddd 的倍数,则 d∣F(l,r)d|F(l,r)d∣F(l,r)。从大到小枚举 ddd 即有 30pts30pts30pts。
考虑继承 F(l,r+1)F(l,r+1)F(l,r+1),我们发现任意 l,rl,rl,r 必然满足 F(l,r)≤F(l,r+1)F(l,r)\le F(l,r+1)F(l,r)≤F(l,r+1),所以倒着处理,每次都把答案从上一次继承并向下枚举直到合法即可。
证明:
反证。
设 x=F(l,r+1)x=F(l,r+1)x=F(l,r+1),正确的 F(l,r)F(l,r)F(l,r) 为 x′x'x′,满足 x<x′x<x'x<x′。则有两个数 l≤o,p≤r,gcd(o,p)=x′l \le o,p \le r,\gcd(o,p)=x'l≤o,p≤r,gcd(o,p)=x′。必然有 1≤o,p≤r+11 \le o,p \le r+11≤o,p≤r+1,则 x=x′x=x'x=x′,与假设矛盾。
注册一个 TeMenHu 通用账户,您就可以在我们提供的所有在线评测服务上提交代码、参与讨论。
使用您的 TeMenHu 通用账户