欧拉函数与欧拉定理
互质
欧拉函数
若在算数基本定理中,
设
是 是质因子,则 中 的倍数分别为 个,根据容斥原理, 中同时是 倍数的个数为: 以此类推,得到欧拉函数的计算公式。
单个数字的欧拉函数值的计算代码:
int phi(int x){
int res=x;
for(int i=2;i<=sqrt(x);i++){
if(x%i==0){
res=res/i*(i-1);
while(x%i==0)x/=i;
}
}
if(x>1){
res=res/x*(x-1);
}
return res;
}
积性函数
如果当
欧拉函数性质
-
中与 互质的数的和为因为
,所以与 不互质的数 成对出现,平均值为 ,因此得到与 互质的数的平均值为 ,进而得到性质1。 -
若
互质,有因为
互质,所以 没有相同的质因数,对 分解质因数,把 展开相乘即可得到 。 -
若
为积性函数,且 ,那么根据积性函数的定义,显然有性质3。
-
设
是质数,若 且 ,则由
,可得 有相同的质因子且只有 的质数不同,把二者展开之后发现 ,所以性质4成立。 -
设
是质数,若 且 ,则由
且 ,得 和 互质,由性质2得 ,又由 是质数得 ,所以性质5成立。 -
令
,若 互质,那么对于 的每个约数 ,都有唯一的 ,使得 ,所以, ,所以 是一个积性函数。由性质3得, ,因为 是一个等比数列求和再加 ,所以 ,带入 ,得 ,所以性质6成立。
线性筛求欧拉函数
由性质4和性质5得
若
且 ,则 若
且 ,则 在线性筛中,每个合数数会被其最小的质因子所标记,所以我们可以利用这一性质进行递推,从
推到 。
void euler(){
phi[1]=1;
for(int i=2;i<=maxn;i++){
if(!fl[i]){
cnt++,pr[cnt]=i;
v[i]=i,phi[i]=i-1;
}
for(int j=1;j<=cnt&&pr[j]<=maxn/i;j++){
if(pr[j]>v[i])break;
fl[pr[j]*i]=true;
v[pr[j]*i]=pr[j];
phi[pr[j]*i]=phi[i]*(i%pr[j]==0?pr[j]:pr[j]-1);
}
}
return;
}
费马小定理
若
欧拉定理
若
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】