欧拉函数_1

欧拉函数_1欧拉函数 一 什么是欧拉函数 欧拉函数就是指 对于一个正整数 n 小于或等于 n 的正整数中与 n 互质的正整数个数 包括 1 的个数 记作 n 所以其通式为 n n 1 1 p1 1 1 p2 1 1 pn 其中 p1 p2

大家好,我是讯享网,很高兴认识大家。

欧拉函数

一.什么是欧拉函数

欧拉函数就是指:对于一个正整数n,小于或等于n的正整数中与n互质的正整数个数(包括1)的个数,记作 φ ( n )


讯享网

所以其通式为: φ ( n ) = n * (1 - 1/p1) * (1 - 1/p2) * …… * (1 - 1/pn),其中p1,p2……pn为n的所有质因数,例如:φ ( 10 ) 的质因数为2,5,所有φ ( 10 ) = 10 * (1 - 1/2) * (1 - 1/5) = 4(1,3,7,9这四个数)
同时φ ( 1 ) = 1;

二.欧拉函数的一些性质

  1. 若n为质数,则φ ( n ) = n - 1;
  2. 若m与n互质,则φ ( n*m ) = φ ( n ) * φ ( m );
  3. 若正整数n与a互质,那么就有在这里插入图片描述
  4. 若n为奇数时,φ ( 2n ) = φ ( n );
  5. 若n = pk且p是质数,那么φ ( n ) = (p - 1) * pk-1 = pk - pk-1.

三.模板代码

1.求单个欧拉函数的模板代码

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

讯享网

2.求1~n的欧拉函数模板代码

讯享网void euler() { E[1]=1; for(int i=2;i<maxn;i++) E[i]=i; for(int i=2;i<maxn;i++){ if(E[i]==i) for(int j=i;j<maxn;j+=i){ E[j]=E[j]/i*(i-1); } } /*求前缀欧拉函数就需要这样for累加 for(int i = 2; i <= maxn; i++) E[i] += E[i-1]; */ } 

3.欧拉筛与欧拉函数模板代码

bool b[maxn];//第 i 个数为合数时 b[i] = true int prime[maxn],cnt,p[maxn];//prime[i] : 第 i 个质数为prime[i];p[ i ] : 欧拉函数 void euler(int n) { p[1]=1; for(int i=2;i<=n;++i) { if(!b[i]) { prime[++cnt]=i; p[i]=i-1; } for(int j=1;j<=cnt&&prime[j]*i<=n;j++ { b[i*prime[j]] = true; if (i%prime[j]==0) { p[i*prime[j]]=p[i]*prime[j]; break; } else { p[i*prime[j]]=p[i]*p[prime[j]]; } } } } 
小讯
上一篇 2025-03-17 22:58
下一篇 2025-04-09 14:38

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/67620.html