积性函数线性筛

点击查看代码
const int maxn=2e7+100;
int n;
int p[maxn],pe[maxn],pr[maxn];
int cnt;
int d[maxn],sig[maxn],phi[maxn],mu[maxn];
void Linear_sieve(int n){
	p[1]=1;
	for(int i=2;i<=n;i++){
		if(!p[i])p[i]=i,pe[i]=i,pr[++cnt]=i;
		for(int j=1;j<=cnt&&i*pr[j]<=n;j++){
			p[i*pr[j]]=pr[j];
			if(p[i]==pr[j]){
				pe[i*pr[j]]=pe[i]*pr[j];
				break;
			}
			else pe[i*pr[j]]=pr[j];
		}
	}
	d[1]=1;
	for(int i=2;i<=n;i++){
		if(i==pe[i]) d[i]=d[i/p[i]]+1;
		else d[i]=d[i/pe[i]]*d[pe[i]];
	}
	
	sig[1]=1;
	for(int i=2;i<=n;i++){
		if(i==pe[i]) sig[i]=sig[i/p[i]]+i;
		else sig[i]=sig[i/pe[i]]*sig[pe[i]];
	}
	
	phi[1]=1;
	for(int i=2;i<=n;i++){
		if(i==pe[i]) phi[i]=i/p[i]*(p[i]-1);
		else phi[i]=phi[i/pe[i]]*phi[pe[i]];
	}
	
	mu[1]=1;
	for(int i=2;i<=n;i++){
		if(i==pe[i]){
			if(i==p[i])mu[i]=-1;
			else mu[i]=0;
		}
		else mu[i]=mu[i/pe[i]]*mu[pe[i]];
	}
}
posted @ 2022-09-18 22:41  xyc1719  阅读(11)  评论(0)    收藏  举报