数论函数基础
数论函数基础
数论函数是数论中相当重要的一环,我们先来将*一些基本的函数 —— H_W_Y
* : 同 “讲”,讲述
全文 绝大多数 内容是对 [0] 中讲述的 粗略抄写 和 胡乱加工
关于 加性函数 和 积性函数 的部分,参考 [3]
1. 一些定义与性质
分类
-
数论函数
定义域 为 (全体)正整数 的函数,因其在 所有正整数 处均有定义,故可以视作 数列
一般
中的 数论函数 的 陪域* 为 整数* : 指 可能的取值范围,并不代表 实际上函数的取值范围(值域)
但显然,一个函数的 值域 被其 陪域 包含 [1]
-
加性函数
若
,有 ,则称 为 加性函数,如 本质不同质因数个数
性质式
判定时,先证明
,然后 根据定义判定此处指(数论)加性函数
(下文 加性函数 默认指代对象)应当与(代数)加性函数
区分 [4]容易发现,由于
,有 ,为 数论加性函数 的 必要条件后者满足 柯西方程 [2],即
,且 定义域 为 有理数 -
完全加性函数
若
,有 ,则称 为 完全加性函数,如 总质因数个数
性质式
判定时,先证明
,然后证明 ,有 即可无需单独证明其为 加性函数
容易发现,任意
均可以 质因数分解 成 质数,故也无须证明 -
积性函数
若
,有 ,则称 为 积性函数,如 欧拉函数
性质式
若一个函数是 积性函数,则其 求和函数 也是 积性函数(如 因数个数 / 因数和 函数)
判定时,先证明
,然后 根据定义判定容易发现,
是 积性函数 的 必要条件同时,我们一般 不 将 常值为
的函数 视作积性函数 -
完全积性函数
若
,有 ,则称 为 完全积性函数,如 幂函数
性质式
判定时,先证明
,然后证明 ,有 即可
加性函数 和 积性函数 的 转化
若
为 加性函数,而 函数 满足 ,其中 为 常数 容易发现
又
时, 故
为 积性函数,同理,当 为 完全加性函数 时, 为 完全积性函数
运算
-
数论函数的 加法
对于 数论函数
, 是 各个位置相加 的表示, -
数论函数的 数乘
对于 数
与 数论函数 , 表示 的 各个位置 乘 ,也作 ,有 -
数论函数的 点乘
对于 数论函数
, 是 各个位置相乘 的表示,为与 狄利克雷卷积 符号
区分,点乘符号 通常 不省略
2. 常见函数,分类及证明
-
单位函数*:
判断
是否为 ,又被称为 元函数,完全积性函数证明显然
-
常数函数*:
无论
取值,函数恒为 ,完全积性函数证明显然
-
幂函数,恒等函数*:
当
时,也记作 ,完全积性函数证明显然
* : 注意,许多博客中称
为 恒等函数,而称 为 单位函数但与
等百科定义 不符,故此处 不采用这种用法 -
除数函数:
表示 的 约数个数,又记作 或 , 表示 的 约数和,又记作有计算式
根据乘法分配律,有
,等比数列求和 即可得到上式积性函数
证明
显然有
,当 时下指标 由
到 的这一步显然只有 时 满足可以将其 唯一分解 后证明
-
欧拉函数:
即
以内与 互质的数 的 个数,积性函数证明
显然有
,我们知道,当 时,一定有由于
,我们认为 将构成 的 完全剩余系即
模 后能得到 的 每一种余数,反证法容易得到,前文中也有提及故我们构建一个
的 矩阵显然我们可以找到
列 与 互质的数(
则 ,故只需 第一行的数与 互质,则后面对应列的数一定与 互质)同时 每一列都是
的完全剩余系,故 每一列有 个与 互质的数于是有
个数 与 均互质,则有 个数与 互质故有
,即 积性函数 性质得证
我们也可以通过 容斥 得到
的 计算式可以感性理解成 对于
的每个质因子 , 中有 个数 不被其整除即 这些数与
没有 这个公因数,对于剩下的数,继续考虑其被 整除的可能从而
-
本质不同质因子个数:
加性函数
证明
显然
若
,同理由于
,则 ,故显然,
分解后的 质因数集合 即为 ,而 集合大小 就是 的值故有
得证 -
莫比乌斯函数:
显然,
时, ,否则设 ,由定义,我们知道当
有 平方因子 时, ,即 不做贡献故我们只需要考虑
的 种情况,设 存在 个 为 ,则注意到 二项式定理
容易发现,当
时,下式即 上式右半部分,于是结束
于是显然有
积性函数
证明
显然
,且若 有 等于 的,容易证明显然,若
中 有 满足 ,则 一定满足此条件故
,同样易得只需考虑
均为 最后一种情况 的情形容易发现,
是 加性函数,而 为 常数,此形式符合 上文中提到的加性函数 和 积性函数 的 转化 的式子形式,故
一定是 积性函数,得证 -
总质因数个数:
完全加性函数
证明(可以回顾 完全加性函数的判定,与 加性函数 / 积性函数 的判断有所不同)
先转化一下,有
显然有
,又由于 ,故易得 ,然后颓狮子故得证,该函数为 完全加性函数
同理可知,总质因数和:
也是 完全加性函数 -
模意义下的乘法逆元:
完全积性函数(
)根据 余数的可乘性 即可证明,前面 同余关系 章节中应有 相关应用
更形式化的,显然有
,并不要求 -
刘维尔函数:
完全积性函数
上文知,
是 完全加性函数,然后根据 加性函数 和 积性函数 的 转化 即可得
3. 线性筛积性函数
前面的 素数 部分,线性筛(欧拉筛) 筛素数的算法
提供了一个 线性筛特殊性质积性函数 在
只要 积性函数
这是一个 充分不必要 条件,有弱化条件,如
计算 也可以,但此处暂不提
bool Vis[MAXN];
int Pri[MAXN];
inline void Prime () {
for (int i = 2; i <= N; ++ i) {
if (!Vis[i]) Pri[++ Cnt] = 0;
for (int j = 1; Pri[j] * i <= N && j <= Cnt; ++ j) {
Vis[i * Pri[j]] = 1;
if (i % Pri[j] == 0) break ;
}
}
}
先来考虑 上述的线性筛 框架,容易发现
显然与 互质 于是我们可以在 标记
这一部分 算出对应的值 唯一的特例是 枚举到
的 最小质因数(即 )时,此时不满足 我们需要把
除尽 其最小质因数,得到 ,显然 ,于是就可以算了 但是如果每次在
时再来除的话,时间复杂度就会假 所以我们需要在过程中 预处理每个数
的 最小质因子 的 最高次幂( ) 最后就得到了 下面的代码框架
inline void Sieve () {
for (int i = 2; i <= N; ++ i) {
if (!Vis[i]) Pri[++ Cnt] = i, F[i] = /* NOTE */, Low[i] = i;
for (int j = 1; j <= Cnt && Pri[j] * i <= N; ++ j) {
Vis[i * Pri[j]] = 1;
if (i % Pri[j] == 0) {
Low[i * Pri[j]] = Low[i] * Pri[j];
if (i == Low[i]) F[i * Pri[j]] = /* NOTE */ // F[i = p_j ^ k] -> F[i * p_j = p_j ^ (k + 1)]
else F[i * Pri[j]] = F[i / Low[i]] * F[Low[i * Pri[j]]];
break ;
}
Low[i * Pri[i]] = Pri[j], F[i * Pri[j]] = F[i] * F[Pri[j]];
}
}
}
4. 引用资料
[1] 定义域、值域和陪域 —— 数学乐
[2] 柯西方程 —— 百度百科
[3] 【数学】加性函数与积性函数 —— mango09(好得很的介绍)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具