[航海协会]数论
Posted StaroForgin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[航海协会]数论相关的知识,希望对你有一定的参考价值。
数论
题解
容易发现发现我们的
F
F
F是一个积性函数,显然,组成它的
ϕ
\\phi
ϕ都是积性的,它们于是卷起来的,
F
F
F肯定是积性的。
所以我们的
G
(
N
)
=
∑
∑
k
i
=
N
∏
F
(
p
i
k
i
)
G(N)=\\sum_\\sum k_i=N\\prod F(p_i^k_i)
G(N)=∑∑ki=N∏F(piki),但这样好像不是特别好看的样子,我们可以考虑转化成生成函数的形式。
我们定义
F
i
=
∑
j
=
0
∞
F
(
p
i
j
)
x
j
F_i=\\sum_j=0^\\infty F(p_i^j)x^j
Fi=∑j=0∞F(pij)xj,容易发现,
F
i
=
(
∑
j
=
0
∞
ϕ
(
p
i
j
)
x
j
)
m
=
(
1
+
∑
j
=
1
∞
(
p
i
j
−
p
i
j
−
1
)
x
j
)
m
=
(
1
−
x
1
−
p
i
x
)
m
G
(
N
)
=
[
x
N
]
∏
i
=
1
t
F
i
=
[
x
N
]
∏
i
=
1
t
(
1
−
x
1
−
p
i
x
)
m
F_i=(\\sum_j=0^\\infty\\phi(p_i^j)x^j)^m=(1+\\sum_j=1^\\infty(p_i^j-p_i^j-1)x^j)^m=(\\frac1-x1-p_ix)^m\\\\ G(N)=[x^N]\\prod_i=1^tF_i=[x^N]\\prod_i=1^t\\left(\\frac1-x1-p_ix\\right)^m\\\\
Fi=(j=0∑∞ϕ(pij)xj)m=(1+j=1∑∞(pij−pij−1)xj)m=(1−pix1−x)mG(N)=[xN]i=1∏tFi=[xN]i=1∏t(1−pix1−x)m现在我们的目的是计算这个分式的第
N
N
N项,显然
N
N
N这么大,不太可能暴力乘出来。
一种较为常见的计算分式远项的方法是线性递推,我们把上面的式子化一化,
也就是将原来的分式简单变化一下
F
=
g
(
x
)
f
(
x
)
=
f
(
−
x
)
g
(
x
)
f
(
−
x
)
f
(
x
)
=
g
′
(
x
)
f
′
(
x
2
)
F=\\fracg(x)f(x)=\\fracf(-x)g(x)f(-x)f(x)=\\fracg'(x)f'(x^2)
F=f(x)g(x)=f(−x)f(x)f(−x)g(x)=f′(x2)g′(x),这样的话,下面就只剩下偶数次项了。
如果我们要求的是第
N
N
N项的
N
N
N为偶数,那么上面的
g
′
(
x
)
g'(x)
g′(x)就只有偶数项有用,递归到,同样
N
N
N为奇数,上面也只有奇数项有用。
可以尝试递归求解,
[
x
N
]
g
(
x
)
f
(
x
)
=
[
x
N
2
]
f
e
v
e
n
′
(
x
)
g
′
(
x
)
(
2
∣
N
)
[
x
N
−
1
2
]
f
o
d
d
′
(
x
)
g
′
(
x
)
(
2
∤
N
)
[x^N]\\fracg(x)f(x)=\\left\\\\beginarraycc[x^\\fracN2]\\fracf'_even(x)g'(x) & (2\\mid N)\\\\ [x^\\fracN-12]\\fracf'_odd(x)g'(x) & (2\\nmid N)\\endarray\\\\\\right.
[xN]f(x)g(x)=[x2N]g′(x)feven′(x)[x2N−1]g′(x)fodd′(x)(2∣N)(2∤N)每次递归相当于都要做一次多项式乘法,将
f
f
f与
g
g
g变成
f
′
f'
f′和
g
′
g'
g′,同时将
N
N
N除以二。
直到我们的[航海协会]基因切割