搞懂欧拉函数
来源:互联网 发布:村上春树跑步语录知乎 编辑:程序博客网 时间:2024/06/08 03:54
定义
在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(
证明
引入:已知正整数 n,求小于 n 与 n 互素的整数的个数,已给出 n 的唯一分解式
分析:首先考虑容斥定理。先从总数 n 中分别减去是
ans=∑S⊆{p1,p2,…,pk}(−1)|s|n∏pi∈Spi (有点难敲呀,凑活看吧^_^)
这里呢把ans记做
ϕ(n) =n(1−1p1)(1−1p2)…(1−1pk)
ϕ(n)=n(1p1(p1−1))(1p2(p2−1))…(1pk(pk−1))
下面的求
int euler_phi(int n){ int m = (int)sqrt(n + 0.5); int ans = n; for (int i = 2;i <= m;i++){ if (n%i == 0){ //如果存在素因子 ans = ans/i*(i-1); while (n%i == 0) n/=i; } } if(n > 1) ans = ans/n*(n-1); //考虑n本身 return ans;}
知道Eratosthenes筛法的都知道 <–这个算法的时间复杂度是
(xjb说了一大推还不如举个例子
我们先让所有的
因为
void phi_table(int n,int *phi){ for (int i = 1;i <= n;i++) phi[i] = i; for(int i = 2;i <= n;i++){ if(phi[i] == i){ //类似于Eratosthenes筛法这里 for(int j = i;j <= n;j+=i){ phi[j] = phi[j]/i*(i-1); } } } }
性质
1.
2.函数的积性即:若m,n互质,则
3.
4.
5.
6.当n为奇数时,
7.对于一个正整数N的素数幂分为:
N=P1q1∗P2q2∗...∗Pnqn.
φ(N)=N∗(1−1/P1)∗(1−1/P2)∗...∗(1−1/Pn).
8.
简单证明: