欧拉相关公式的结论
-
欧拉函数定义:设n是一个正整数,欧拉函数 φ ( n ) φ(n) φ(n)为1~n的所有与n互素的数的个数。
- 例子: φ ( 6 ) = 2 ,即 1 , 2 , 3 , 4 , 5 , 6 中与 6 互素的有 1 , 5 φ(6)=2,即1,2,3,4,5,6中与6互素的有1,5 φ(6)=2,即1,2,3,4,5,6中与6互素的有1,5
-
欧拉定理:设一个正整数m,a是一个整数且a与m互素(互质),即
gcd(a,m) = 1
,则有 a φ ( m ) ≡ 1 ( m o d m ) a^{φ(m)}≡1(mod\ m) aφ(m)≡1(mod m)。该公式表示:a的 φ ( m ) φ(m) φ(m)次幂后对m取模与1同余。- 例子: a = 5 , m = 6 , 则 5 与 6 互素, φ ( 6 ) = 2 , − − > 5 φ ( 6 ) m o d 6 = 5 2 m o d 6 = 1 a =5, m = 6, 则5与6互素,φ(6)=2, -->5^{φ(6)} mod\ 6 = 5^2\ mod\ 6\ =1 a=5,m=6,则5与6互素,φ(6)=2,−−>5φ(6)mod 6=52 mod 6 =1
-
欧拉函数的相关定理:
-
定理一:设p和q是互素的正整数,则 φ ( p q ) = φ ( p ) φ ( q ) φ(pq)=φ(p)φ(q) φ(pq)=φ(p)φ(q)
- 由定理一可知:欧拉函数是一个积性函数
- 推论:
- 若 n = p 1 α 1 p 2 α 2 . . . . p k α k n = p_1^{α_1}p_2^{α_2}....p_k^{α_k} n=p1α1p2α2....pkαk,其中 p 1 , p 2 , p 3 . . . p k p_1,p_2,p_3...p_k p1,p2,p3...pk互素, a 1 , a 2 , a 3 . . a k a_1,a_2,a_3..a_k a1,a2,a3..ak为相应的幂,则 φ ( n ) = φ ( p 1 α 1 ) φ ( p 2 α 2 ) . . . . φ ( p k α k ) φ(n) = φ(p_1^{α_1})φ(p_2^{α_2})....φ(p_k^{α_k}) φ(n)=φ(p1α1)φ(p2α2)....φ(pkαk),其中 p 1 α 1 , p 2 α 2 , . . . . p k α k p_1^{α_1},p_2^{α_2},....p_k^{α_k} p1α1,p2α2,....pkαk也互素
- 例子:n=84, 84 = 2 2 ∗ 3 ∗ 7 , φ ( 84 ) = φ ( 2 2 ∗ 3 ∗ 7 ) = φ ( 2 2 ) φ ( 3 ) φ ( 7 ) 84 = 2^2*3*7,φ(84)=φ(2^2*3*7)=φ(2^2)φ(3)φ(7) 84=22∗3∗7,φ(84)=φ(22∗3∗7)=φ(22)φ(3)φ(7)
-
定理二:设n为正整数,那么 n = Σ d ∣ n φ ( d ) , 其中 d 为 n 的因子 n =Σ_{d|n}φ(d),其中d为n的因子 n=Σd∣nφ(d),其中d为n的因子
-
定理三:设 n = p 1 α 1 p 2 α 2 . . . . p k α k n=p_1^{α_1}p_2^{α_2}....p_k^{α_k} n=p1α1p2α2....pkαk,为n的质因数分解(即分解成素数的乘积),则有:
φ ( N ) = N ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) . . . ( 1 − 1 p k ) = φ ( p 1 α 1 ) φ ( p 2 α 2 ) . . . . . . . φ ( p k α k ) 若, N 为质数,则 φ ( N ) = N − 1 (其前面 N − 1 个数都与其互质) 若, N = p k , p 是素数,则 φ ( N ) = p k − p k − 1 ,即, p 是质数,则与 p 不互质的数一定为 p 的倍数,那么,在 P k 范围内,共有 p k − 1 个倍数。 φ(N)=N(1-\frac{1}{p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_k})\\=φ(p_1^{α_1})φ(p_2^{α_2}).......φ(p_k^{α_k})\\ 若,N为质数,则φ(N)=N-1(其前面N-1个数都与其互质)\\ 若,N=p^k,p是素数,则φ(N) = p^k-p^{k-1},即,p是质数,则与p不互质的数一定为p的倍数,那么,在P^k范围内,共有p^{k-1}个倍数。 φ(N)=N(1−p11)(1−p21)...(1−pk1)=φ(p1α1)φ(p2α2).......φ(pkαk)若,N为质数,则φ(N)=N−1(其前面N−1个数都与其互质)若,N=pk,p是素数,则φ(N)=pk−pk−1,即,p是质数,则与p不互质的数一定为p的倍数,那么,在Pk范围内,共有pk−1个倍数。
相关公式的模板题
-
题目来源:Acwing 873:欧拉函数
-
试除法分解质因数+公式 φ ( N ) = N ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) . . . ( 1 − 1 p k ) φ(N)=N(1-\frac{1}{p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_k}) φ(N)=N(1−p11)(1−p21)...(1−pk1)求解单欧拉函数
- 时间复杂度: O ( n ) O(\sqrt{n}) O(n)
#include<iostream> using namespace std; void get_euler(int a) //即求互质个数 { int sum = a; //N*(1-1/p1)(1-1/p2)... for(int i = 2; i <= a/i; i++) //分解质因数 { if(a % i == 0) { while(a % i == 0) { a /= i; } sum = sum / i * (i-1); } } if(a > 1) sum = sum / a * (a - 1); cout << sum << endl; } int main() { int n; cin>>n; for(int i = 0; i < n; i++) { int a; cin>>a; get_euler(a); } return 0; }
-
题目来源:Acwing 874:筛法求欧拉函数
-
求1~n的欧拉函数,可用线性筛降低时间复杂度至 O ( n ) O(n) O(n),若试除法,复杂度为 O ( n n ) O(n\sqrt{n}) O(nn)
- 原理:
- 一个质数p的欧拉函数显然有p-1个,因为从1~p-1都与p互质。
- n = p k , p 是质数,则与 p 不互质的数一定为 p 的倍数,那么,在 P k 范围内,共 p k − 1 个倍数 n=p^k, p是质数,则与p不互质的数一定为p的倍数,那么,在P^k范围内,共p^{k-1}个倍数 n=pk,p是质数,则与p不互质的数一定为p的倍数,那么,在Pk范围内,共pk−1个倍数
#include<iostream> using namespace std; const int N = 1e6+10; int phi[N];//欧拉函数集,1~n,每一个除了质数就是合数,合数一定由质数组成,那么,每一个都会存下互素个数 int primes[N]; //存素数(质数),需要用时,直接用p,or:(p-1)。 int cnt; bool vis[N]; //筛合数 int euler(int n) { phi[1] = 1; //规定,1的互素个数为1,也为1本身。其余的正整数互素个数是 没有 本身的。 for(int i = 2; i <= n; i++) //求1~n所有素数 { if(!vis[i]) { primes[cnt++] = i; //素数 phi[i] = i-1;//素数前有i-1个数字与其互素 } //欧拉筛 for(int j = 0; j < cnt; j++)//筛掉倍数 { if(primes[j] * i > n) break; //只需要1~n范围内的 vis[primes[j] * i] = true; //保证最小质数筛 if(i % primes[j] == 0) { //求欧拉函数:此时i与j不互素,由欧拉推论:phi(i*p) = phi(i)*prime[p]-->p*phi(i)(i=p^k...只要有约数就可以用) phi[primes[j] * i] = primes[j]*phi[i]; break;//确保了不会再再算下面的互质情况 } //如果互素 phi[primes[j] * i] = phi[i] * (primes[j] - 1); //即phi[i] * phi[primes[j]],即:phi(pq) = phi(p)phi(q),每一个质数其前面都有(prime[j]-1个互素的数字,即p有p-1个) } } } int main() { int n; cin>>n; euler(n); long long sum = 0; //爆数据了 for(int i = 1; i <= n; i++) sum += phi[i]; cout<<sum<<endl; return 0; }