模拟赛中的一道题,让我发现自己莫比乌斯函数的基础十分薄弱。😢
推导
先来看看莫比乌斯函数的定义:
设 n=∏i=1Npiki(p 为质数集合),则
μ(n)=⎩⎪⎨⎪⎧1(−1)N0n=1∀1≤i≤N,ki=1ki>1
当 i∈p 时,显然 μ(i)=−1。
设 n′=p1n,在线性筛中,n 通过 n′⋅p1 被筛去。
当 n′∣p1,即 k1>1 时,μ(n)=0;
否则 n′ 有 N−1 个质因子。
如果 μ(n′)=0,即 ∀2≤i≤N,ki=1 时,根据定义得:
μ(n)=(−1)N=(−1)N−1⋅(−1)=μ(n′)⋅(−1)=−μ(n′)
如果 μ(n′)=0,则 n′ 一定有次数大于 1 的质因子,所以 n 也一定有,即 μ(n)=0。
此时 μ(n)=−μ(n′) 仍成立。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| mu[1]=1; for(int i=2;i<=N;++i) { if(!npri[i]) { pri[++cnt]=i; mu[i]=-1; } for(int j=1,tem;(j<=cnt)&&((tem=i*pri[j])<=N);++j) { npri[tem]=true; if(i%pri[j]==0) { break; } mu[tem]=-mu[i]; } }
|
资料
本文部分参考线性筛法筛素数、莫比乌斯函数、欧拉函数 | Menci’s Blog。