题意
给定
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 的,就能很好地通过本题。