欧拉定理
只是简单说明一下。
欧拉函数 $\varphi(x)$
定义
设n为正整数,则1,2,...,n中与n互素的整数的个数记作$\varphi(x)$,叫做欧拉函数。
性质(我认为比较有用的几个)
- 设p为素数,则$\varphi(x)=p-1$.
- 设整数n有标准分解式$p_1^{\alpha_1}p_2^{\alpha_2}...p_k^{\alpha_k}$,则
$\varphi(n)=n\prod ^k_{i=1}(1-\frac{1}{p_i})=n(1-\frac{1}{p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_k})$
- 设正整数m、n互素,则$\varphi(nm)=\varphi(n)\varphi(m)$。
欧拉定理
如果m和a是互素的正整数,则$a^{\varphi(m))}\equiv1(mod\ m)$。
证明 取$r_1,r_2,...,r_{phi(m)}$为模m的既约剩余系,故$ar_1,ar_2,...ar_{\phi(m)}$也是模m的既约剩余系。由于二者互为排列,因此有
$r_1...r_{\varphi(m)}\equiv ar_1..ar_{\varphi(m)}=a^{\varphi(m)}r_1..r_{\varphi(m)} \ \ (mod\ m)$
求欧拉函数的代码(利用第二个性质)
1 long long phi(long long n) 2 { 3 long long ret=n; 4 for(int i=2;i*i<=n;i++) 5 { 6 if(n%i==0) 7 { 8 while(n%i==0) 9 { 10 ret-=ret/i; 11 while(n%i==0)n/=i; 12 } 13 } 14 } 15 if(n>1)ret-=ret/n; 16 return ret; 17 }