五边形数:形如 k ( 3 k − 1 ) 2 \frac{k(3k-1)}{2} 2k(3k−1) 的数,其中 k k k 为任意整数(可以为负)。
定义欧拉函数:(与
φ
(
n
)
\varphi(n)
φ(n) 为小于等于
n
n
n 的正整数中与
n
n
n 互质的数的个数不同)
ϕ
(
x
)
=
∏
i
=
1
∞
(
1
−
x
i
)
\phi(x)=\prod_{i=1}^{\infty}(1-x^i)
ϕ(x)=i=1∏∞(1−xi)
五边形数定理:
ϕ
(
x
)
=
∑
k
=
−
∞
∞
(
−
1
)
k
x
k
(
3
k
−
1
)
2
=
1
+
∑
k
=
1
∞
(
−
1
)
k
x
k
(
3
k
±
1
)
2
\phi(x)=\sum_{k=-\infty}^{\infty}(-1)^kx^{\tfrac{k(3k-1)}{2}}=1+\sum_{k=1}^{\infty}(-1)^kx^{\tfrac{k(3k\pm 1)}{2}}
ϕ(x)=k=−∞∑∞(−1)kx2k(3k−1)=1+k=1∑∞(−1)kx2k(3k±1)
证明:十分巧妙,可以见 blog1 或 blog2。
回到整数划分问题,设
p
n
p_n
pn 表示将
n
n
n 划分为若干个可以相同的正整数的方案数,那么
p
n
p_n
pn 的生成函数为:
P
(
x
)
=
∏
i
=
1
∞
(
1
+
x
i
+
x
2
i
+
⋯
)
=
∏
i
=
1
∞
1
1
−
x
i
=
1
ϕ
(
x
)
P(x)=\prod_{i=1}^{\infty}(1+x^i+x^{2i}+\cdots)=\prod_{i=1}^{\infty}\dfrac{1}{1-x^i}=\dfrac{1}{\phi(x)}
P(x)=i=1∏∞(1+xi+x2i+⋯)=i=1∏∞1−xi1=ϕ(x)1
于是:
P
(
x
)
ϕ
(
x
)
=
1
P(x)\phi(x)=1
P(x)ϕ(x)=1
考虑左右两边的
n
n
n 次项系数,在
n
>
0
n>0
n>0 时右边的
n
n
n 次项系数为
0
0
0,左边展开得到:
p
n
−
p
n
−
1
−
p
n
−
2
+
p
n
−
5
+
p
n
−
7
−
⋯
=
0
p_n-p_{n-1}-p_{n-2}+p_{n-5}+p_{n-7}-\cdots=0
pn−pn−1−pn−2+pn−5+pn−7−⋯=0
那么
p
n
p_n
pn 就可以
O
(
n
n
)
O(n\sqrt n)
O(nn) 递推了。
例题:
【LOJ6077】逆序对 加强版
假瑞出的毒瘤题/se
改为 m m m 次询问 n , k n,k n,k 的答案的奇偶性,保证 k ≤ n k\leq n k≤n, n , k ≤ 1 0 8 n,k\leq 10^8 n,k≤108。
转化为求:
[
x
k
]
∏
i
=
1
n
(
1
−
x
i
)
(
1
−
x
)
n
[x^k]\dfrac{\prod_{i=1}^n(1-x^i)}{(1-x)^n}
[xk](1−x)n∏i=1n(1−xi)
设
F
(
x
)
=
∏
i
=
1
n
(
1
−
x
i
)
F(x)=\prod_{i=1}^n(1-x^i)
F(x)=∏i=1n(1−xi),
G
(
x
)
=
1
(
1
−
x
)
n
G(x)=\dfrac{1}{(1-x)^n}
G(x)=(1−x)n1。
由五边形数定理知 F ( x ) F(x) F(x) 有 O ( n ) O(\sqrt n) O(n) 个位置有值。
考虑 G ( x ) G(x) G(x),其 k k k 次项的组合意义相当于将 k k k 拆分为 n n n 个自然数的方案数,用插板法可知为 ( k + n − 1 n − 1 ) \dbinom{k+n-1}{n-1} (n−1k+n−1)。
注意到 ( k + n − 1 n − 1 ) m o d 2 = 1 \dbinom{k+n-1}{n-1}\bmod 2=1 (n−1k+n−1)mod2=1 当且仅当 ( k + n − 1 ) & ( n − 1 ) = ( n − 1 ) (k+n-1)\&(n-1)=(n-1) (k+n−1)&(n−1)=(n−1),即 k & ( n − 1 ) = 0 k\&(n-1)=0 k&(n−1)=0。
于是:
G
(
x
)
≡
∏
2
t
&
(
n
−
1
)
=
0
(
1
+
x
2
t
)
G(x)\equiv \prod_{2^t\&(n-1)=0}(1+x^{2^t})
G(x)≡2t&(n−1)=0∏(1+x2t)
先
O
(
n
)
O(\sqrt n)
O(n) 把
F
(
x
)
F(x)
F(x) 预处理出来,那么
F
(
x
)
G
(
x
)
F(x)G(x)
F(x)G(x) 就相当于
F
(
x
)
F(x)
F(x) 乘
log
n
\log n
logn 次只有两项的多项式。
使用 bitset 优化即可,时间复杂度 O ( n + n log n w + m ) O(\sqrt n+\frac{n\log n}{w}+m) O(n+wnlogn+m)。