欧拉函数

定义:在数论,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(因此φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’s totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。欧拉函数是积性函数,当 gcd(a,b)=1时,

通项公式:

为x的质因子。
欧拉函数算法

int oula(int n){
	int rea=n;
	for(int i=2;i*i<=n;i++){
		if(n%i==0){
			rea=rea - rea/i;
			while(n%i==0){
				n/=i;
			}
		}
	}
	if(n>1) rea=rea-rea/n;
	return rea;
}

欧拉打表

1.埃氏筛法打表
void getPhi(){
	for(int i=1;i<maxn;i++){
		p[i]=i;
	}
	for(int i=2;i<maxn;i++){
		if(p[i]==i){
			for(int j=i;j<maxn;j+=i){
				p[j]=(p[j]/i)*(i-1);
			}
		}
	}
}
2.欧氏筛法打表
void getPhi(){
	phi[1]=1;
	for(int i=2;i<=n;i++){
		if(!flag[i]){
			prime[++tot]=i;
			phi[i]=i-1;
		}
		for(int j=1;j<=tot;j++){
			if(i*prime[j]>n) break;
			flag[i*prime[j]]=1;
			if(i%prime[j]==0){
				phi[i*prime[j]]=phi[i]*prime[j];
				break;
			}
			phi[i*prime[j]]=phi[i]*phi[prime[j]];
		}
	}
}

  

 

posted @ 2022-03-06 20:02  心悟&&星际  阅读(197)  评论(0编辑  收藏  举报