【数学/数论】欧拉函数 - Phi
引言
自 Mr.果 讲了 CF1900D 之后,决定复习 n 月之前学习的知识:欧拉函数。
欧拉函数,即
它表示小于等于
特别的,
-
; -
( 为质数);
为积性函数。
用途: 线性筛法求范围内所有
。
- 欧拉反演
一个正整数 可以表示为:
证明
如果
,那么
, 。 如果我们设
表示 的数的个数,那么
。 根据上面的证明,我们发现,
,从而
。注意到约数 d 和 具有对称性,所以上式化为 。
基本用途:对于要使用多个
的值时,如果一个一个 的求,效率将会很慢,而该算法适用于求一定值域范围内的所有欧拉函数值。
Time:
**Memory: **
使用性质:欧拉函数是积性函数。
小声BB:所有积性函数都可以用线性筛来求
ll pri[M], tot, phi[M];
bool isp[M];
// pri -> 储存素数(线性筛的基本框架)
// tot -> 素数个数
// isp -> 是否是素数
// phi -> 欧拉函数值
void pre(int Max){// Max -> 上界
for(int i = 1; i <= Max; i ++) isp[i] = 1;
isp[1] = 0;
phi[1] = 1;//phi(1) = 1
for(int i = 2; i <= Max; i ++){
if(isp[i]){
pri[++ tot] = i;
phi[i] = i - 1;//除了1以外,所有小于等于质数的数都与质数互质
}
for(int j = 1;j <= tot && i * pri[j] <= Max;j ++){
isp[i * pri[j]] = 0;
if(i % pri[j]) phi[i * pri[j]] = phi[i] * phi[pri[j]];//积性函数的性质
else{
phi[i * pri[j]] = phi[i] * pri[j];
break;
}
}
}
}
额,我也不会证,看看 dalao 的博客吧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)