欧拉函数
欧拉函数:
定义:
\(\varphi (n)\) 表示小于等于 \(n\) ,和 \(n\) 互质的数的个数。
当 \(n\) 为质数, \(\varphi(n)=n-1\)
性质:
-
欧拉函数为积性函数(可以用线性筛计算)
如果 \(gcd(a,b)=1\) , 那么 $\varphi(a \times b)=\varphi(a) \times $ -
当 \(n\) 为奇数时 \(\varphi(2n)=\varphi(n)\)
-
\(n=\sum{d|n} \varphi(d)\),根据莫反得到
-
若 \(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\) 就行了.
不关注的有难了😠😠😠https://b23.tv/hoXKV9