数论基础C
数论基础C
欧拉函数
\(1\) ~ \(n\) 中与 \(n\) 互质的数的个数叫做欧拉函数,记作 \(\phi (n)\)
有性质如下:
- 存在质数 \(p\) ,则 \(\phi(p)=p-1\)
- 存在质数 \(p\) ,则 \(\phi(p^k)=(p-1)p^{k-1}\)
于是可以推出欧拉函数的计算公式,根据惟一分解定理有
\[n=\prod_{i=1}^sp_i^{\alpha_i}=p_1^{\alpha_1}p_2^{\alpha_2} \dots p_s^{\alpha_s}
\]
于是欧拉函数可以写为
\[\phi(n)=\prod_{i=1}^s\phi(p_i^{s_i})
=
\prod_{i=1}^s(p_i-1)p_i^{\alpha_i-1}
\\
\Rightarrow\phi(n)=\prod_{i=1}^sp_i^{\alpha_i}(1-\frac{1}{p_i})
=\prod_{i=1}^sp_i^{\alpha_i}\times \prod_{i=1}^s(1-\frac{1}{p_i})
\]
整理后得到
\[\phi(n)=n\times\prod_{i=1}^s\frac{p_i-1}{p_i}=n\times
\frac{p_1-1}{p_1}\times\frac{p_2-1}{p_2}\times\dots\times\frac{p_s-1}{p_s}
\]
观察上式可以发现欧拉函数只和 \(n\) 与它的质因子有关
试除法求欧拉函数
从小到大枚举 \(\sqrt{n}\) 的质因子,计算 \(\frac{p_i-1}{p_i}\) ,然后在 \(n\) 中除掉这个质因子的所有贡献
long long psi(int n){ long long res = n; for (long long i = 2; i * i <= n; i++){ if (n % i == 0){//判断i是否为n的质因子 res = res * (i - 1) / i;//计算欧拉函数的部分 while (n % i == 0) //把n中的这个质因子除干净 n /= i; } } if (n > 1) res = res * (n - 1) / n;/如果最后剩余的n大于1,那么n就是最后的一个最大质因子 return res; }
if (n > 1) res = res * (n - 1) / n;
加上这句判断的原因是:一个整数 \(n\) 最多仅有一个超过 \(\sqrt n\) 的质因子
筛法求欧拉函数
通过线性筛法计算从 \(1\) ~ \(n\) 之间每个数的欧拉函数,以下是欧拉函数的另一个性质:
- 若有 \(gcd(m,n)=1\) (\(m,n\)互质),则 \(\phi(mn)=\phi(m)\phi(n)\)
int p[N], vis[N], cnt; int phi[N]; void get_phi(int n){ for (int i = 2, i <= n; i++){ if (!vis[i]){ p[cnt++] = i; phi[i] = i - 1; } for (int j = 0; i * p[j] <= n; j++){ int m = i * p[j]; vis[m] = 1; if (i % p[j] == 0){ phi[m] = p[j] * phi[i]; break; } else phi[m] = (p[j] - 1) * phi[i]; } } }
如果枚举的 \(i\) 为质数,那么 \(\phi(i)=i-1\)
//vis[i]==0 phi[i] = i - 1;
枚举的 \(i\) 为合数(此时的 \(i\) 已被之前的质因子筛到过),那么存在两种情况,可以向后递推合数
-
筛到的 \(m\) 可以写作 \(i*p_j\) ,如果 \(i\) 能被 \(p_j\) 整除,说明 \(\phi(m)=\phi(i)\)(\(i\) 存在 \(m\) 的所有质因子)
-
如果 \(i\) 不能被 \(p_j\) 整除,说明 \(i,p_j\) 互质,那么 \(\phi(m)=\phi(i)*\phi(p_j)\)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具