裸题:
bzoj3328
在学习这个之前建议对FFT中的求和引理有一定的了解。
单位根反演就是对:
∑
i
∣
k
C
n
i
(
m
o
d
p
)
\sum_{i|k}C_{n}^i(mod~p)
∑i∣kCni(mod p)进行变换,
p是质数,
k
∣
p
−
1
k|p-1
k∣p−1,n比较大
设 m o d p mod~p mod p下的原根为g, w = g ( p − 1 ) / k w=g^{(p-1)/k} w=g(p−1)/k,k比较小
w的含义就是k次单位复数根,不过这里的根不是复数,而是mo意义下类似的一个东西。
w的性质是 w 0 − k − 1 w^{0-k-1} w0−k−1互不相同,且 w i = w i m o d k w^{i}=w^{i~mod~k} wi=wi mod k
单位根反演就是:
1
k
∑
i
=
0
k
−
1
w
i
j
=
[
k
∣
j
]
{1\over k}\sum_{i=0}^{k-1}w^{ij}=[k|j]
k1∑i=0k−1wij=[k∣j]
我们来尝试证明这个结论:
1.k|j
则
w
j
=
1
w^j=1
wj=1,那么左式=1,成立。
2.k不整除j
则
w
j
≠
1
w^j≠1
wj=1,于是左式可以等比数列求和:
s
u
m
i
=
0
k
−
1
(
w
j
)
i
sum_{i=0}^{k-1}(w^j)^i
sumi=0k−1(wj)i
=
w
j
k
−
1
w
j
−
1
={w^{jk}-1\over w^j-1}
=wj−1wjk−1
1
−
1
w
j
−
1
=
0
{1-1\over w^j-1}=0
wj−11−1=0
那么也是对的。
那么我们做一下这个裸题:
A
n
s
=
∑
i
=
0
n
/
k
C
n
i
k
∗
F
(
i
k
)
Ans=\sum_{i=0}^{n/k}C_{n}^{ik}*F(ik)
Ans=∑i=0n/kCnik∗F(ik)
=
1
k
∑
i
=
0
n
C
n
i
∗
F
(
i
)
∗
∑
j
=
0
k
−
1
w
i
j
={1\over k}\sum_{i=0}^nC_{n}^{i}*F(i)*\sum_{j=0}^{k-1}w^{ij}
=k1∑i=0nCni∗F(i)∗∑j=0k−1wij
内层外移:
=
1
k
∑
j
=
0
k
−
1
∑
i
=
0
n
C
n
i
∗
F
(
i
)
∗
w
j
i
={1\over k}\sum_{j=0}^{k-1}\sum_{i=0}^nC_{n}^{i}*F(i)*w_{j}^i
=k1∑j=0k−1∑i=0nCni∗F(i)∗wji
斐波拉契第i项可以写成一个2*2的矩阵的i次方的每一个位置的值,不妨设这个矩阵是A
=
1
k
∑
j
=
0
k
−
1
∑
i
=
0
n
C
n
i
∗
A
i
∗
(
w
j
)
i
={1\over k}\sum_{j=0}^{k-1}\sum_{i=0}^nC_{n}^{i}*A^i*(w^{j})^i
=k1∑j=0k−1∑i=0nCni∗Ai∗(wj)i
第二个循环可以二项式反演:
1
k
∑
j
=
0
k
−
1
(
(
A
∗
w
j
)
k
+
I
)
n
{1\over k}\sum_{j=0}^{k-1}((A*w^j)^k+I)^n
k1∑j=0k−1((A∗wj)k+I)n
复杂度: O ( 8 k ∗ l o g n ) O(8k*log n) O(8k∗logn)