首先我们数论只会gcd
首先,我们道听途说,感性认知了一下莫比乌斯反演——可以在一定范围内简化计算的一个工具。
然后就没有然后了,在去北京的前两周开始了反演魔术的学习。
=================以上内容毫无营养================
基础知识
定义莫比乌斯函数:
用通俗一点的话来讲,就是:
(1)若
n=1
n
=
1
,那么
μ(n)=1
μ
(
n
)
=
1
(2)若
n=p1p2…pk,其中pi为互异素数,则μ(n)=(−1)k
n
=
p
1
p
2
…
p
k
,
其
中
p
i
为
互
异
素
数
,
则
μ
(
n
)
=
(
−
1
)
k
(3)其余情况
μ(n)=0
μ
(
n
)
=
0
莫比乌斯函数的性质
性质一:莫比乌斯函数是积性函数。
μ(a)μ(b)=μ(a⋅b),a⊥b
μ
(
a
)
μ
(
b
)
=
μ
(
a
⋅
b
)
,
a
⊥
b
应用:根据这一性质,我们可以采取线性筛法,用
O(n)
O
(
n
)
的时间预处理出所有
[1,n]
[
1
,
n
]
内的莫比乌斯函数值。
质数的值为
−1
−
1
,如果一个数存在某个质因子的指数不为
1
1
,那么它将会被筛为 (值得注意的是,只有数存在最小质因子的指数大于
1
1
时,它才会被直接筛为 ,其余的情况是由
μ(d)=−μ(i)
μ
(
d
)
=
−
μ
(
i
)
来完成的)。
每个数仅被其最小质因子筛去,故复杂度为
O(n)
O
(
n
)
。
void init()
{
mu[1]=1;
for(int i=2;i<MAXN;++i)
{
if(!isnotpri[i])
{
mu[i]=-1;
pri[++cnt]=i;
}
for(int j=1;j<=cnt && i*pri[j]<MAXN;++j)
{
isnotpri[i*pri[j]]=true;
if(i%pri[j]==0)
{
mu[i*pri[j]]=0;
break;
}
else
mu[i*pri[j]]=-mu[i];
}
}
for(int i=1;i<MAXN;++i)
sum[i]=sum[i-1]+mu[i];
}
大概就是长这样。
性质二:
性质三:
这个的证明就看这里吧
然后通过这些东西,我们进入正文。
=================以上内容仅是基础=================
正文
如果
f(n),g(n)
f
(
n
)
,
g
(
n
)
是数论函数,且满足:
则有莫比乌斯反演:
证明就截图了QvQ
倒数第二步的推导就用了莫比乌斯函数的性质。
当然这个东西还可以表示成这样子:
如果
f(n),g(n)
f
(
n
)
,
g
(
n
)
是数论函数,且满足:
则有莫比乌斯反演:
也可以写成:
(这个是从上面那个博客截图的,其中g=原来的f,f=原来的F)
证明和上面的一样。
那么这些就是入门的东西啦。
剩下的东西多半是靠数学推导的,然而我并不是很想打数学公式了。
就先这样吧。