积性函数

 

1 vis[0]=vis[1]=1,mu[1]=1,phi[1]=1;
2 for (RG int i=2;i<=N;++i){
3     if (!vis[i]) mu[i]=-1,phi[i]=i-1,prime[++cnt]=i;
4     for (RG int j=1,k=i*prime[j];j<=cnt && k<=N;++j,k=i*prime[j]){
5     vis[k]=1;
6     if (!(i%prime[j])){ mu[k]=0,phi[k]=phi[i]*prime[j]; break; }
7     else mu[k]=-mu[i],phi[k]=phi[i]*phi[prime[j]];
8     }
9 }

 

 

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

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

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

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

 

 

 

 

相关文章:

  • 2021-06-28
  • 2021-09-08
  • 2022-01-10
  • 2022-01-26
  • 2022-01-20
  • 2022-02-22
  • 2021-11-25
猜你喜欢
  • 2021-12-07
  • 2021-06-20
  • 2021-12-11
  • 2021-06-23
  • 2021-08-26
  • 2021-11-09
  • 2021-12-30
相关资源
相似解决方案