欧拉函数与欧拉降幂
欧拉函数
对于正整数\(n\),欧拉函数是小于或等于\(n\)的正整数中与\(n\)互质的数的数目。
\(\varphi(1)=1\),除了1之外,所有正整数与它本身都不互质
对于质数\(p\),\(\varphi(p)=p-1\)
\(\sum_{d|n}\varphi(d)=n\),其中\(d\)是\(n\)的因数
欧拉函数是积性函数,若\(m,n\)互质,则有\(\varphi(mn)=\varphi(m)\varphi(n)\)
通式:\(\varphi(x)=x\prod_{i=1}^n(1-\frac{1}{p_i})\) (\(p_1,p_2,\cdots,p_n\)为\(x\)的所有质因数)
模板一:求单个正整数的欧拉函数
时间复杂度\(O(\sqrt x)\)
模板题:hdu1286 找新朋友
int phi(int x){
int ans=x;
for(int i=2;i*i<=x;i++){
if(x%i==0){
ans=ans/i*(i-1);
while(x%i==0){
x/=i;
}
}
}
if(x>1) ans=ans/x*(x-1);
return ans;
}
模板二:求区间内所有数的欧拉函数
时间复杂度\(O(n)\)
模板题:hdu2824 The Euler function
const int maxn=500010;
int phi[maxn];
void get_phi(int n){
for(int i=0;i<n;i++) phi[i]=i;
for(int i=2;i<n;i++){
if(phi[i]==i){
for(int j=i;j<n;j+=i) phi[j]=phi[j]/i*(i-1);
}
}
}
欧拉降幂
欧拉降幂公式:
\(a^k\equiv a^{k\% \varphi(m)+\varphi(m)}(mod\ m)\),其中\(\varphi(m)\)是欧拉函数,\(a,k,m\)都是整数并且\(k\geq \varphi(m)\)