题意
给定A,B,C,L,R,求(∑i=LRi∗⌊A∗i+CB⌋)mod(109+7)。
A,B,C,L,R≤109
分析
F(N,A,B,C)的引入
我们先考虑一个简单的题目:求∑i=0N⌊A∗i+CB⌋。我们令F(N,A,B,C)=∑i=0N⌊A∗i+CB⌋。我们现在要求解F这个函数。
分情况讨论:
F(N,A,B,C)=∑i=0N⌊A∗i+CB⌋=∑i=0N⌊(⌊AB⌋∗B+AmodB)∗i+CB⌋=∑i=0Ni∗⌊AB⌋+∑i=0N⌊AmodB∗i+CB⌋=∑i=0Ni∗⌊AB⌋+F(N,AmodB,B,C)
2°,A<B
F(N,A,B,C)=∑i=0N⌊A∗i+CB⌋=∑i=0N∑j=0⌊A∗i+CB⌋−1(j<⌊A∗i+CB⌋)=∑j=0⌊A∗N+CB⌋−1∑i=0N(j<⌊A∗i+CB⌋)
我们看看满足括号里的条件的i的范围。
j+1≤A∗i+CB
B∗j+B−CA≤i
⌊B∗j+B−C−1A⌋<i
我们就得到了i的范围
设zj=⌊B∗j+B−C−1A⌋,Max=⌊A∗N+CB⌋−1
F(N,A,B,C)=∑j=0Max(N−zj)=N∗(Max+1)−∑j=0Max⌊B∗j+B−C−1A⌋=∑j=0Max(N−zj)=N∗(Max+1)−F(Max,B,A,B−C−1)递归计算即可。我们发现,每次分子分母交换位置,都会做一次取模运算,类似欧几里得算法,故它的复杂度为logN。
G(N,A,B,C)的引入
我们回到原题。
令G(N,A,B,C)=∑i=0Ni∗⌊A∗i+CB⌋。类似上面的推理,若A≥B,我们可以先取模计算,在此不再赘述如何推。现在我们假设A<B。
∑i=0Ni∗⌊A∗i+CB⌋=∑i=0Ni∑j=0⌊A∗i+CB⌋−11=∑j=0Max∑i=zj+1Ni其中,Max,zj与之前定义一样。
由等差数列求和公式,我们进一步得到G(N,A,B,C)=12∑j=0Max(N−zj)∗(N+zj+1)=12∑j=0Max(N2+N)−12∑j=0Maxz2j−12∑j=0Maxzj
现在我们要知道如何求∑j=0Maxz2j。
T(N,A,B,C)的引入
设T(N,A,B,C)=∑i=0N⌊A∗i+CB⌋2。
同样的,我们只考虑A<B的情况(A≥B的情况同样能简单推出式子转化成A<B的情况)。
令t=⌊A∗i+CB⌋。我们可以尝试构造一个关于t的等差数列求和式子推到
令S=∑i=0N∑j=0t−1j=12∑i=0N(t−1)∗t=12∑i=0Nt2−12∑i=0Nt
那么有2S=T(N,A,B,C)−F(N,A,B,C),即T(N,A,B,C)=2∗S+F(N,A,B,C)
然后我们把S变下形,
总结
综上所述,当A<B时
G(N,A,B,C)=12∗(Max+1)∗(N2+N)−12∗T(Max,B,A,B−C−1)−12∗F(Max,B,A,B−C−1)
F(N,A,B,C)=N∗(Max+1)−F(Max,B,A,B−C−1)
T(N,A,B,C)=N∗(Max+1)∗Max−2∗G(Max,B,A,B−C−1)+F(N,A,B,C)
其中,Max=⌊A∗N+CB⌋−1
因为每一层(N,A,B,C一定)要求F、G、T时用到的Max,zj是一样的,我们就可以同时递归处理F、G、T值,这样总的时间复杂度是logN的,就能很好地通过本题。