欧拉函数

欧拉函数:

定义:

\(\varphi (n)\) 表示小于等于 \(n\) ,和 \(n\) 互质的数的个数。

\(n\) 为质数, \(\varphi(n)=n-1\)

性质:

  1. 欧拉函数为积性函数(可以用线性筛计算)
    如果 \(gcd(a,b)=1\) , 那么 $\varphi(a \times b)=\varphi(a) \times $

  2. \(n\) 为奇数时 \(\varphi(2n)=\varphi(n)\)

  3. \(n=\sum{d|n} \varphi(d)\),根据莫反得到

  4. \(n=p^k\) ,其中 \(p\) 是质数,那么 \(\varphi(n)=p^k-p^{k-1}\)

欧拉定理:

\(gcd(a,m)=1\) ,则 \(a^{\varphi(m)} \equiv 1(\mod m)\)

求欧拉函数:

线性筛即可。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int prime[N],vis[N],phi[N],cnt,n;//定义:小于等于n,且和n互质的数
int main(){
    scanf("%d",&n);
    vis[1]=phi[1]=1;
    for(int i=2;i<=n;i++){
        if(!vis[i]) prime[++cnt]=i,phi[i]=i-1;
        for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
            vis[i*prime[j]]=1;
            if(!(i%prime[j])){
                phi[i*prime[j]]=phi[i]*prime[j];
                break;
            }
            phi[i*prime[j]]=phi[i]*phi[prime[j]];
        }
    }    
    system("pause");
    return 0;
}

费马小定理:

\(p\) 为素数,且 \(gcd(a,p)=1\) , 则 \(a^{p-1} \equiv 1 (\mod p)\)

或者也可以说 \(a^p \equiv a(\mod p)\)

拓展欧拉定理:

\[a^c~\equiv~\begin{cases}a^{c~Mod~\phi(m)} &\gcd(a,m)~=~1 \\a^c &\gcd(a,m)~\neq~1~\land~c~<~\phi(m) \\ a^{c~Mod~\phi(m)~+~\phi(m)} &\gcd(a,m)~\neq~1~\land~c~\geq~\phi(m)\end{cases} \]

证明看 \(OI-WIKI\) 就行了.

posted @ 2021-10-05 19:25  Evitagen  阅读(607)  评论(0编辑  收藏  举报