1、HDU - 4686 (https://vjudge.net/problem/HDU-4686)
题意:
已知 a 0 = A 0 , a i = a i − 1 ∗ A X + A Y , b 0 = B 0 , b i = b i − 1 ∗ B X + B Y a_0 = A0, a_i = a_{i-1} * AX + AY, b_0 = B0, b_i = b_{i - 1} * BX + BY a0=A0,ai=ai−1∗AX+AY,b0=B0,bi=bi−1∗BX+BY,给定 n , A 0 , A X , A Y , B 0 , B X , B Y n, A0, AX, AY, B0, BX, BY n,A0,AX,AY,B0,BX,BY,求 ∑ i = 0 n − 1 a i b i \sum\limits_{i = 0}^{n - 1}a_ib_i i=0∑n−1aibi。 ( n ≤ 1 0 18 ) (n \leq 10^{18}) (n≤1018)
解题思路:
令
c
i
=
a
i
b
i
,
S
n
−
1
=
∑
i
=
0
n
−
1
c
i
c_i = a_ib_i,~S_{n - 1} = \sum\limits_{i = 0}^{n - 1}c_i
ci=aibi, Sn−1=i=0∑n−1ci,易得递推关系
c
i
=
A
X
∗
B
X
∗
c
i
−
1
+
A
X
∗
B
Y
∗
a
i
−
1
+
A
Y
∗
B
X
∗
b
i
−
1
+
A
Y
∗
B
Y
S
i
−
1
=
S
i
−
2
+
c
i
−
1
设
M
i
−
1
=
A
M
i
−
2
,
M
−
1
=
(
0
,
A
0
∗
B
0
,
A
0
,
B
0
,
1
)
T
M
i
−
1
=
(
S
i
−
1
,
c
i
,
a
i
,
b
i
,
1
)
T
M
i
−
2
=
(
S
i
−
2
,
c
i
−
1
,
a
i
−
1
,
b
i
−
1
,
1
)
T
c_i = AX * BX * c_{i - 1} + AX * BY * a_{i - 1} + AY * BX * b_{i - 1} + AY * BY \\ ~ \\ S_{i - 1} = S_{i - 2} + c_{i - 1} \\ ~ \\ 设~M_{i - 1} = AM_{i - 2},~M_{-1} = (0, A0 * B0, A0, B0, 1)^T \\ ~ \\ M_{i - 1} = (S_{i - 1}, c_{i}, a_{i}, b_{i}, 1)^T \\ ~ \\ M_{i - 2} = (S_{i - 2}, c_{i - 1}, a_{i - 1}, b_{i - 1}, 1)^T
ci=AX∗BX∗ci−1+AX∗BY∗ai−1+AY∗BX∗bi−1+AY∗BY Si−1=Si−2+ci−1 设 Mi−1=AMi−2, M−1=(0,A0∗B0,A0,B0,1)T Mi−1=(Si−1,ci,ai,bi,1)T Mi−2=(Si−2,ci−1,ai−1,bi−1,1)T
不难写出转移矩阵
A
A
A,则
M
n
−
1
=
A
n
M
−
1
M_{n - 1} = A^nM_{-1}
Mn−1=AnM−1矩阵快速幂即可。
2、HDU - 5667 (https://vjudge.net/problem/HDU-5667)
题意:
f
n
=
{
1
n
=
1
a
b
n
=
2
a
b
f
n
−
1
c
f
n
−
2
o
t
h
e
r
w
i
s
e
f_n = \begin{cases} 1 & n = 1 \\ a^b & n = 2 \\ a^bf_{n - 1}^cf_{n - 2} & otherwise \end{cases}
fn=⎩⎪⎨⎪⎧1ababfn−1cfn−2n=1n=2otherwise
给定
n
,
a
,
b
,
c
,
p
n, a, b, c, p
n,a,b,c,p,求
f
n
m
o
d
p
f_n~mod~p
fn mod p。
(
n
≤
1
0
18
)
(n \leq 10^{18})
(n≤1018)
解题思路:
取对数,
g
n
=
l
o
g
a
f
n
=
{
0
n
=
1
b
n
=
2
b
+
c
g
n
−
1
+
g
n
−
2
o
t
h
e
r
w
i
s
e
f
n
=
a
g
n
g_n = log_af_n = \begin{cases} 0 & n = 1 \\ b & n = 2 \\ b + cg_{n - 1} + g_{n - 2} & otherwise \end{cases} \\ ~ \\ f_n = a^{g_n}
gn=logafn=⎩⎪⎨⎪⎧0bb+cgn−1+gn−2n=1n=2otherwise fn=agn
矩阵快速幂求出
g
n
g_n
gn,再快速幂求出
f
n
f_n
fn。
3、HDU - 5451 (https://vjudge.net/problem/HDU-5451)
题意:
给定 x , M x, M x,M,求 ⌊ ( 5 + 2 6 ) 1 + 2 x ⌋ m o d M \lfloor(5 + 2\sqrt{6})^{1 + 2^x}\rfloor~mod~M ⌊(5+26)1+2x⌋ mod M。 ( x < 2 32 , M ≤ 46337 且 是 素 数 ) (x \lt 2^{32}, M \leq 46337~且是素数) (x<232,M≤46337 且是素数)
解题思路:
先考虑
f
(
n
)
=
⌊
(
5
+
2
6
)
n
⌋
f(n) = \lfloor(5 + 2\sqrt{6})^n\rfloor
f(n)=⌊(5+26)n⌋,这像是二阶线性递推式的通项的一部分,考虑下式
g
(
n
)
=
a
g
(
n
−
1
)
+
b
g
(
n
−
2
)
特
征
方
程
r
2
−
a
r
−
b
=
0
Δ
=
a
2
+
4
b
特
征
根
r
=
a
±
a
2
+
4
b
2
若
r
1
≠
r
2
,
g
(
n
)
=
c
1
r
1
n
+
c
2
r
2
n
构
造
g
(
n
)
=
(
5
+
2
6
)
n
+
(
5
−
2
6
)
n
得
a
=
10
,
b
=
−
1
,
即
g
(
n
)
=
10
g
(
n
−
1
)
−
g
(
n
−
2
)
而
0
<
(
5
−
2
6
)
n
≤
1
,
故
f
(
n
)
=
g
(
n
)
−
1
g(n) = ag(n - 1) + bg(n - 2) \\ ~ \\ 特征方程 ~ r^2 - ar - b = 0 \quad \Delta = \sqrt{a^2 + 4b}\\ ~ \\ 特征根 ~ r = \cfrac{a \pm \sqrt{a^2 + 4b}}{2} \\ ~ \\ 若 r_1 \neq r_2,g(n) = c_1r_1^n + c_2r_2^n \\ ~ \\ 构造 ~ g(n) = (5 + 2\sqrt{6})^n + (5 - 2\sqrt{6})^n \\ ~ \\ 得 ~ a = 10,~b = -1,~即g(n) = 10g(n - 1) - g(n - 2)\\ ~ \\ 而 ~ 0 \lt (5 - 2\sqrt{6})^n \leq 1, ~故 ~ f(n) = g(n) - 1
g(n)=ag(n−1)+bg(n−2) 特征方程 r2−ar−b=0Δ=a2+4b 特征根 r=2a±a2+4b 若r1=r2,g(n)=c1r1n+c2r2n 构造 g(n)=(5+26)n+(5−26)n 得 a=10, b=−1, 即g(n)=10g(n−1)−g(n−2) 而 0<(5−26)n≤1, 故 f(n)=g(n)−1
考虑矩阵快速幂求解
g
(
1
+
2
x
)
g(1 + 2^x)
g(1+2x),由于
1
+
2
x
1 + 2^x
1+2x 太大,需要进一步寻找循环节优化,由于
M
M
M 不大,暴力求循环节可行,通用方法见下题。
4、HDU - 5674 (https://vjudge.net/problem/HDU-5674)
题意:
给定 a , b , x , y a, b, x, y a,b,x,y,求 f ( x y ) f(x^y) f(xy),其中 f ( n ) = ( a + b ) n + ( a − b ) n m o d 1 0 9 + 7 f(n) = (a + \sqrt{b})^n + (a - \sqrt{b})^n~mod~10^9+7 f(n)=(a+b)n+(a−b)n mod 109+7。 ( x ≤ 50 , y ≤ 1 0 18 ) (x \leq 50, y \leq 10^{18}) (x≤50,y≤1018)
解题思路:
由上一题特征根法得到通项
g
(
n
)
=
c
g
(
n
−
1
)
+
d
g
(
n
−
2
)
,
c
=
2
a
,
d
=
b
−
a
2
g(n) = cg(n - 1) + dg(n - 2), ~c = 2a,~d = b - a^2
g(n)=cg(n−1)+dg(n−2), c=2a, d=b−a2
依旧需要求循环节来优化,记
p
e
r
per
per 为一个周期,对于上述二阶常系数线性递推式
(
c
m
o
d
p
≠
0
,
d
m
o
d
p
≠
0
)
(c~mod~p\neq 0,~d~mod~p\neq 0)
(c mod p=0, d mod p=0),这里不加证明给出:
p
e
r
=
{
p
−
1
(
Δ
p
)
=
1
(
p
+
1
)
(
p
−
1
)
(
Δ
p
)
=
−
1
(
p
为
奇
素
数
)
p
(
p
−
1
)
(
Δ
p
)
=
0
其
中
,
(
Δ
p
)
为
勒
让
德
符
号
,
若
p
=
2
,
有
p
e
r
=
3
统
一
化
有
p
e
r
=
p
2
−
1
(
p
为
素
数
)
若
c
m
o
d
p
=
0
或
d
m
o
d
p
=
0
,
数
列
很
容
易
得
到
,
不
再
讨
论
per = \begin{cases} p - 1 & (\cfrac{\Delta}{p}) = 1 \\ (p + 1)(p - 1) & (\cfrac{\Delta}{p}) = -1 & (p~为奇素数) \\ p(p - 1) & (\cfrac{\Delta}{p}) = 0 \end{cases} \\ ~ \\ 其中,~(\cfrac{\Delta}{p}) ~ 为勒让德符号,~若 ~ p = 2,~有 ~ per = 3 \\ ~ \\ 统一化有 ~ per = p^2 - 1~ (p~为素数) \\ ~ \\ 若 ~ c~mod~p = 0~或~d~mod~p = 0,~数列很容易得到,不再讨论
per=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧p−1(p+1)(p−1)p(p−1)(pΔ)=1(pΔ)=−1(pΔ)=0(p 为奇素数) 其中, (pΔ) 为勒让德符号, 若 p=2, 有 per=3 统一化有 per=p2−1 (p 为素数) 若 c mod p=0 或 d mod p=0, 数列很容易得到,不再讨论
5、CodeForces - 719E (https://vjudge.net/problem/CodeForces-719E)
题意:
给定一个长度为 n n n 的数组 a a a,再有 m m m 次操作,每次操作为:① 1 , l , r , x 1, l, r, x 1,l,r,x,将 a l , a l + 1 , . . . , a r a_l, a_{l + 1}, ... ,a_r al,al+1,...,ar 加上 x x x,② 2 , l , r 2, l, r 2,l,r,询问 ∑ i = l r f ( a i ) \sum\limits_{i = l}^{r}f(a_i) i=l∑rf(ai),其中 f ( n ) f(n) f(n) 为斐波那契数列。 ( n , m ≤ 1 0 5 ) (n, m \leq 10^5) (n,m≤105)
解题思路:
考虑用矩阵来得到斐波那契数列的值,令 M i = A M i − 1 M_i = AM_{i - 1} Mi=AMi−1,
其中 M i = [ f ( i + 1 ) f ( i ) ] , A = [ 1 1 1 0 ] , M 0 = [ 1 0 ] , M n = A n M 0 M_i = \left[\begin{matrix} f(i + 1) \\ f(i) \end{matrix}\right],~A = \left[\begin{matrix} 1 & 1 \\ 1 & 0\end{matrix}\right], M_0 = \left[\begin{matrix} ~1~ \\ 0 \end{matrix}\right],~M_n = A^nM_0 Mi=[f(i+1)f(i)], A=[1110],M0=[ 1 0], Mn=AnM0
先看求和, ∑ i = l r M a i = ∑ i = l r A a i M 0 = ( ∑ i = l r A a i ) M 0 \sum\limits_{i = l}^{r} M_{a_i} = \sum\limits_{i = l}^{r} A^{a_i}M_0 = (\sum\limits_{i = l}^{r}A^{a_i})M_0 i=l∑rMai=i=l∑rAaiM0=(i=l∑rAai)M0
再看更新, ∑ i = l r M a i + x = ( ∑ i = l r A a i + x ) M 0 = ( ∑ i = l r A a i ) A x M 0 \sum\limits_{i = l}^{r} M_{a_i + x} = (\sum\limits_{i = l}^{r} A^{a_i + x})M_0 = (\sum\limits_{i = l}^{r}A^{a_i})A^xM_0 i=l∑rMai+x=(i=l∑rAai+x)M0=(i=l∑rAai)AxM0
线段树维护 ∑ i = l r A a i \sum\limits_{i = l}^{r} A^{a_i} i=l∑rAai,更新操作为区间乘矩阵 A x A^x Ax。