前言
最近似乎没什么事干啊,那就学习数论一个。
其中似乎不是那么偏门的就数杜教筛了吧 (特征多项式是什么啊)
小结一下。
积性函数
前置知识
什么是积性函数?畸形函数
也就是唆,对于一个函数
f
(
n
)
f(n)
f(n)满足
∀
m
,
n
(
g
c
d
(
m
,
n
)
=
1
)
f
(
m
∗
n
)
=
f
(
n
)
∗
f
(
m
)
\forall m,n(gcd(m,n)=1)f(m*n)=f(n)*f(m)
∀m,n(gcd(m,n)=1)f(m∗n)=f(n)∗f(m)
而完全积性函数就是
∀
m
,
n
f
(
m
∗
n
)
=
f
(
n
)
∗
f
(
m
)
\forall m,n\ f(m*n)=f(n)*f(m)
∀m,n f(m∗n)=f(n)∗f(m)
人话就是一个是要满足互质,另一个不需要满足。
一个小补充:(百度百科)
狄利克雷卷积
狄克利雷卷积狄利克雷卷积当然也是前置知识
这个其实是一个非常普通的卷积形式,和普通的基本木有什么区别:
h
(
n
)
=
∑
d
∣
n
f
(
d
)
∗
g
(
n
d
)
h(n)=\sum_{d|n}f(d)*g(\frac n d)
h(n)=d∣n∑f(d)∗g(dn)
其中唯一的区别就是他的f和g都是积性函数。
于是狄利克雷卷积就讲完啦?
木有。其实还有些小性质:
1、看到上面那个神奇的
h
(
n
)
h(n)
h(n),其实它也是积性函数。
证明:
设
a
,
b
满
足
a
∗
b
=
n
且
g
c
d
(
a
,
b
)
=
1
设a,b满足a*b=n且gcd(a,b)=1
设a,b满足a∗b=n且gcd(a,b)=1
h
(
n
)
=
∑
a
∣
n
,
b
∣
n
f
(
a
∗
b
)
∗
g
(
n
a
∗
b
)
h(n)=\sum_{a|n,b|n}f(a*b)*g(\frac n {a*b})
h(n)=a∣n,b∣n∑f(a∗b)∗g(a∗bn)
鉴于f和g都是积性函数。所以可以拆出来:
h
(
n
)
=
∑
a
∣
n
,
b
∣
n
f
(
a
)
∗
f
(
b
)
∗
g
(
n
a
)
∗
g
(
n
b
)
h(n)=\sum_{a|n,b|n}f(a)*f(b)*g(\frac n a)*g(\frac n b)
h(n)=a∣n,b∣n∑f(a)∗f(b)∗g(an)∗g(bn)
h
(
n
)
=
∑
a
∣
n
f
(
a
)
∗
g
(
n
a
)
∗
∑
b
∣
n
f
(
b
)
∗
g
(
n
b
)
h(n)=\sum_{a|n}f(a)*g(\frac n a)*\sum_{b|n}f(b)*g(\frac n b)
h(n)=a∣n∑f(a)∗g(an)∗b∣n∑f(b)∗g(bn)
h
(
n
)
=
h
(
a
)
∗
h
(
b
)
h(n)=h(a)*h(b)
h(n)=h(a)∗h(b)
完美证明~
2、交换律
h
(
n
)
=
∑
d
∣
n
f
(
d
)
∗
g
(
n
d
)
=
∑
d
∣
n
g
(
d
)
∗
f
(
n
d
)
h(n)=\sum_{d|n}f(d)*g(\frac n d)=\sum_{d|n}g(d)*f(\frac n d)
h(n)=d∣n∑f(d)∗g(dn)=d∣n∑g(d)∗f(dn)
证明?显然。
3、结合律
在这里我们假设
∗
*
∗表示狄利克雷卷积。
那么:
h
(
n
)
∗
(
f
(
n
)
∗
g
(
n
)
)
=
(
h
(
n
)
∗
f
(
n
)
)
∗
g
(
n
)
h(n)*(f(n)*g(n))=(h(n)*f(n))*g(n)
h(n)∗(f(n)∗g(n))=(h(n)∗f(n))∗g(n)
证明?其实把柿子展开就完了。显然。
4、分配律
h
(
n
)
∗
(
f
(
n
)
+
g
(
n
)
)
=
h
(
n
)
∗
f
(
n
)
+
h
(
n
)
∗
g
(
n
)
h(n)*(f(n)+g(n))=h(n)*f(n)+h(n)*g(n)
h(n)∗(f(n)+g(n))=h(n)∗f(n)+h(n)∗g(n)
这个也通过展开得到。显然。
5、单位元
这个似乎数论函数都有啊。
h
(
n
)
∗
I
(
n
)
=
h
(
n
)
h(n)*I(n)=h(n)
h(n)∗I(n)=h(n)
这个证明我不会
有了这几个神奇的性质,其实可以干很多事。
举个栗子?
还记得莫比乌斯反演吗?戳这里有惊喜!
我们用狄利克雷卷积就很轻松地可以证明其积性。
现在有两个函数:
设函数:
V
(
n
)
=
1
V(n)=1
V(n)=1(显然这是积性函数)
再设函数:
d
(
n
)
=
∑
d
∣
n
1
d(n)=\sum_{d|n}1
d(n)=∑d∣n1
那么我们可以得知:
d
(
n
)
=
V
(
n
)
∗
V
(
n
)
d(n)=V(n)*V(n)
d(n)=V(n)∗V(n)所以
d
(
n
)
d(n)
d(n)为积性函数。
然后我们把我们神奇的莫比乌斯函数搬出来
μ
(
n
)
\mu(n)
μ(n)
我们知道其一个神奇的性质:
∑
d
∣
n
μ
(
d
)
=
[
n
=
=
1
]
\sum_{d|n}\mu(d)=[n==1]
∑d∣nμ(d)=[n==1]
那不就是:
d
(
n
)
∗
μ
(
n
)
=
[
n
=
=
1
]
d(n)*\mu(n)=[n==1]
d(n)∗μ(n)=[n==1]
又因为前面的
d
(
n
)
d(n)
d(n)和后面的
[
n
=
=
1
]
[n==1]
[n==1]都是积性函数。
那么中间的
μ
(
n
)
\mu(n)
μ(n)利用上面证明思路反证一下就好了。
妙啊♂
大致的就这样吧。下面才是重头戏!
杜教筛
这里有一道题【BZOJ3944】,就是求下面的式子:
∑
i
=
1
n
φ
(
i
)
和
∑
i
=
1
n
μ
(
i
)
\sum_{i=1}^n\varphi(i)和\sum_{i=1}^n\mu(i)
i=1∑nφ(i)和i=1∑nμ(i)
其中
n
<
=
2
31
−
1
n<=2^{31}-1
n<=231−1
显然,
O
(
n
)
O(n)
O(n)都过不了。怎么办?
这时就要用到这个神奇的杜教筛了。
杜教筛其实是一种用来快速求出一个积性函数的算法。
现在我们要求:
a
n
s
(
n
)
=
∑
i
=
1
n
f
(
i
)
ans(n)=\sum_{i=1}^nf(i)
ans(n)=i=1∑nf(i)
具体做法就是把它转化一下。类似于上面证明
μ
\mu
μ积性的思想,找到一些奇怪的函数转化一下。
那么现在就要找到另外的一个积性函数:
g
(
n
)
g(n)
g(n)
开始变戏法:
∑
i
=
1
n
h
(
i
)
=
∑
i
=
1
n
∑
j
∣
i
f
(
j
)
∗
g
(
i
j
)
\sum_{i=1}^nh(i)=\sum_{i=1}^n\sum_{j|i}f(j)*g(\frac i j)
i=1∑nh(i)=i=1∑nj∣i∑f(j)∗g(ji)
对调一下:
∑
i
=
1
n
h
(
i
)
=
∑
i
=
1
n
∑
j
∣
i
f
(
i
j
)
∗
g
(
j
)
\sum_{i=1}^nh(i)=\sum_{i=1}^n\sum_{j|i}f(\frac i j)*g(j)
i=1∑nh(i)=i=1∑nj∣i∑f(ji)∗g(j)
∑
i
=
1
n
h
(
i
)
=
∑
j
=
1
n
g
(
j
)
∗
∑
i
∣
n
j
∣
f
(
i
)
\sum_{i=1}^nh(i)=\sum_{j=1}^ng(j)*\sum_{i}^{|\frac n j|}f(i)
i=1∑nh(i)=j=1∑ng(j)∗i∑∣jn∣f(i)
这一步特别妙,大致可以这样理解:把关于g的贡献都提到前面,然后后面的就是f对g的贡献。
然后仔细看:右边的f不就是ans吗?
∑
i
=
1
n
h
(
i
)
=
∑
j
=
1
n
g
(
j
)
∗
a
n
s
(
∣
n
j
∣
)
\sum_{i=1}^nh(i)=\sum_{j=1}^ng(j)*ans(|\frac n j|)
i=1∑nh(i)=j=1∑ng(j)∗ans(∣jn∣)
然后,是更神奇的一步:把右边第一项拉出来:
∑
i
=
1
n
h
(
i
)
=
g
(
1
)
∗
a
n
s
(
n
)
+
∑
j
=
2
n
g
(
j
)
∗
a
n
s
(
∣
n
j
∣
)
\sum_{i=1}^nh(i)=g(1)*ans(n)+\sum_{j=2}^ng(j)*ans(|\frac n j|)
i=1∑nh(i)=g(1)∗ans(n)+j=2∑ng(j)∗ans(∣jn∣)
移项:
g
(
1
)
∗
a
n
s
(
n
)
=
∑
i
=
1
n
h
(
i
)
−
∑
j
=
2
n
g
(
j
)
∗
a
n
s
(
∣
n
j
∣
)
g(1)*ans(n)=\sum_{i=1}^nh(i)-\sum_{j=2}^ng(j)*ans(|\frac n j|)
g(1)∗ans(n)=i=1∑nh(i)−j=2∑ng(j)∗ans(∣jn∣)
所以现在问题就变为找到一个合适的
g
(
n
)
g(n)
g(n),然后可以快速求出
h
(
n
)
h(n)
h(n),接下来利用递归+分块求出
a
n
s
ans
ans
具体怎么弄的话,处理出前
n
2
3
n^{\frac 2 3}
n32的ans值,然后分块求解。如果分块出来的结果大于
n
2
3
n^{\frac 2 3}
n32就继续递推下去,否则直接返回答案。
至于时间复杂度怎么计算的话,显然是
O
(
n
2
3
)
O(n^{\frac 2 3})
O(n32)其中我也不知道怎么证。
那么回到上面的题的话,只有一个问题没有解决了。就是那个神奇的g到底怎么找呢?
这个,反正我找不出什么规律,胡乱找几个柿子看一下能不能找到一个满足狄利克雷卷积的套进去试试。
其实上面那题两个问都套一个 V ( n ) = 1 V(n)=1 V(n)=1就好了。
代码(待填)
一个巩固?
如果柿子长这样怎么办?
∑
i
=
1
n
i
∗
φ
(
i
)
\sum_{i=1}^ni*\varphi(i)
i=1∑ni∗φ(i)
考虑找到一个g!但是这个g并不是一个简单的积性函数,而是要起一个辅助的功能的函数。(黑人问号.jpg)
其实也很好想。只要把那个神奇的i给弄掉即可。
套一个
V
(
n
)
=
1
V(n)=1
V(n)=1不就好了吗?所以我们设
G
(
n
)
=
n
G(n)=n
G(n)=n
会发生什么奇妙的化学反应呢?
h
(
n
)
=
∑
d
∣
n
d
∗
φ
(
d
)
∗
G
(
n
d
)
h(n)=\sum_{d|n}d*\varphi(d)*G(\frac n d)
h(n)=d∣n∑d∗φ(d)∗G(dn)
h
(
n
)
=
∑
d
∣
n
d
∗
φ
(
d
)
∗
n
d
h(n)=\sum_{d|n}d*\varphi(d)*\frac n d
h(n)=d∣n∑d∗φ(d)∗dn
h
(
n
)
=
n
∗
∑
d
∣
n
φ
(
d
)
h(n)=n*\sum_{d|n}\varphi(d)
h(n)=n∗d∣n∑φ(d)
套上上面的式子,所以得到:
a n s ( n ) = ∑ i = 1 n i ∗ ∑ d ∣ i φ ( d ) − ∑ i = 2 n i ∗ a n s ( ∣ n j ∣ ) ans(n)=\sum_{i=1}^ni*\sum_{d|i}\varphi(d)-\sum_{i=2}^ni*ans(|\frac n j|) ans(n)=i=1∑ni∗d∣i∑φ(d)−i=2∑ni∗ans(∣jn∣)
关于一个性质:
∑
d
∣
n
φ
(
d
)
=
n
\sum_{d|n}\varphi(d)=n
∑d∣nφ(d)=n
证明?上网查。
那么就可以快速计算了。
差不多就这样了。
后记
不太清楚这个杜教筛有什么神奇的应用,以后做到什么神奇的题目再补补吧~
这是一道:
51nod 1237 最大公约数之和 V3