求助
  • 板块学术版
  • 楼主int233
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/2/24 19:35
  • 上次更新2023/10/28 07:49:42
查看原帖
求助
333855
int233楼主2022/2/24 19:35

RT,n\sqrt{n}的复杂度求φ(n)\varphi(n),这两种写法结果有什么区别吗?

第一种:

ll a[40005],b[14005],r;
void shai(int n){
	a[0]=a[1]=1;
	for(int i=2;i<=n;i++){
		if(!a[i]){
			b[++r]=i;
		}
		for(int j=1;j<=r&&i*b[j]<=n;j++){
			a[i*b[j]]=1;
			if(i%b[j]==0){
				break;
			}
		}
	}
}
ll eular(ll x){
	ll ans=x;
	for(int i=1;b[i]*b[i]<=x&&i<=r;i++){
		if(x%b[i]==0){
			ans=ans/b[i]*(b[i]-1);
			while(x%b[i]==0){
				x/=b[i];
			}
		}
	}
	if(x>1){
		ans=ans/x*(x-1);
	}
	return ans;
}

第二种:

ll eular(ll x){
	ll ans=x;
	for(int i=2;i*i<=x;i++){
		if(x%i==0){
			ans=ans/i*(i-1);
			while(x%i==0){
				x/=i;
			}
		}
	}
	if(x>1){
		ans=ans/x*(x-1);
	}
	return ans;
}
2022/2/24 19:35
加载中...