积性函数

积性函数线性筛,筛素数,u(n),欧拉函数:

 vis[]=vis[]=,mu[]=,phi[]=;
for (RG int i=;i<=N;++i){
if (!vis[i]) mu[i]=-,phi[i]=i-,prime[++cnt]=i;
for (RG int j=,k=i*prime[j];j<=cnt && k<=N;++j,k=i*prime[j]){
vis[k]=;
if (!(i%prime[j])){ mu[k]=,phi[k]=phi[i]*prime[j]; break; }
else mu[k]=-mu[i],phi[k]=phi[i]*phi[prime[j]];
}
}

可以发现,线性筛分为3部分:

1.n本身是素数,这个根据积性函数的定义可得,很容易求。

2.i%prime[j]!=0,这个也是根据积性函数的性质可得。f(a)f(b)=f(a

3.i%prime[j]==0,可能需要找规律。据ljh2000神犇的说法,可以用2,4,8或3,9,27这些数来找。

μ(n),ϕ

05-28 15:21