数论函数基础

数论函数基础

数论函数是数论中相当重要的一环,我们先来将*一些基本的函数 —— H_W_Y

* : 同 “讲”,讲述

全文 绝大多数 内容是对 [0] 中讲述的 粗略抄写胡乱加工

关于 加性函数积性函数 的部分,参考 [3]


1. 一些定义与性质

分类

  • 数论函数

    定义域(全体)正整数 的函数,因其在 所有正整数 处均有定义,故可以视作 数列

    一般 OI 中的 数论函数陪域* 为 整数

    * : 指 可能的取值范围,并不代表 实际上函数的取值范围(值域)

    但显然,一个函数的 值域 被其 陪域 包含 [1]

  • 加性函数

    a,bN,ab,有 f(ab)=f(a)+f(b),则称 f加性函数,如 本质不同质因数个数


    性质式

    f(pici)=f(pici)

    判定时,先证明 f(1)=0,然后 根据定义判定

    此处指(数论)加性函数 Additive Function(下文 加性函数 默认指代对象)

    应当与(代数)加性函数 Additive Map 区分 [4]

    容易发现,由于 f(1×1)=f(1)+f(1),有 f(1)=0,为 数论加性函数必要条件

    后者满足 柯西方程 [2],即 f(x+y)=f(x)+f(y),且 定义域有理数

  • 完全加性函数

    a,bN,有 f(ab)=f(a)+f(b),则称 f完全加性函数,如 总质因数个数


    性质式

    f(pici)=f(pici)=(cif(pi))

    判定时,先证明 f(1)=0,然后证明 pP,有 f(p)+f(a)=f(ap) 即可

    无需单独证明其为 加性函数

    容易发现,任意 b 均可以 质因数分解质数,故也无须证明 f(a)+f(b)=f(ab)

  • 积性函数

    a,bN,ab,有 f(ab)=f(a)f(b),则称 f积性函数,如 欧拉函数 φ


    性质式

    f(pici)=f(pici)

    若一个函数是 积性函数,则其 求和函数 也是 积性函数(如 因数个数 / 因数和 函数)

    判定时,先证明 f(1)=1,然后 根据定义判定

    容易发现,f(1)=1积性函数必要条件

    同时,我们一般 常值为 0 的函数 视作积性函数

  • 完全积性函数

    a,bN,有 f(ab)=f(a)+f(b),则称 f完全积性函数,如 幂函数 Idk


    性质式

    f(pici)=f(pici)=f(pi)ci

    判定时,先证明 f(1)=1,然后证明 pP,有 f(p)f(a)=f(ap) 即可

加性函数积性函数 的 转化

f加性函数,而 函数 g 满足 g(x)=Cf(x),其中 C常数

容易发现 g(1)=Cf(1)=C0=1

ab 时,g(a)g(b)=Cf(a)×Cf(b)=Cf(a)+f(b)=Cf(ab)=g(ab)

g积性函数,同理,当 f完全加性函数 时,g完全积性函数


运算

  • 数论函数的 加法

    对于 数论函数 f,gf+gf,g 各个位置相加 的表示,(f+g)(x)=f(x)+g(x)

  • 数论函数的 数乘

    对于 c数论函数 fcf 表示 f各个位置c,也作 cf,有 (cf)(x)=cf(x)

  • 数论函数的 点乘

    对于 数论函数 f,gfgf,g 各个位置相乘 的表示,(fg)(x)=f(x)g(x)

    为与 狄利克雷卷积 符号 区分,点乘符号 通常 不省略


2. 常见函数,分类及证明

  • 单位函数*:ϵ(n)=[n=1]

    判断 n 是否为 1,又被称为 元函数完全积性函数

    证明显然

  • 常数函数*:I(n)=1

    无论 n 取值,函数恒为 1完全积性函数

    证明显然

  • 幂函数,恒等函数*:idk(n)=nk

    k=1 时,也记作 id(n)完全积性函数

    证明显然

    * : 注意,许多博客中称 I(n)恒等函数,而称 id(n)单位函数

    但与 Wiki 等百科定义 不符,故此处 不采用这种用法

  • 除数函数:σk(n)=dndk

    σ0(n) 表示 n约数个数,又记作 τ(n)d(n)σ1(n) 表示 n约数和,又记作 σ(n)

    有计算式

    σk(n)={(ci+1)k=0pi(ci+1)k1pi1k>0

    根据乘法分配律,有 σk(n)=j=0cipijk等比数列求和 即可得到上式

    积性函数

    证明

    显然有 σk(1)=1k=1,当 ab

    σk(a)σk(b)=d1ad1kd2bd2k=d1ad2bd1kd2k=d1ad2b(d1d2)k=dabdk=σk(ab)

    下指标d1a,d2bdab 的这一步显然只有 ab满足

    可以将其 唯一分解 后证明

  • 欧拉函数:φ(n)=i=1n[in]

    n 以内与 n 互质的数个数积性函数

    证明

    显然有 φ(1)=1,我们知道,当 ak,bk 时,一定有 abk

    由于 ab,我们认为 ib+k (i[0,a1]) 将构成 a完全剩余系

    ib+ka 后能得到 a每一种余数,反证法容易得到,前文中也有提及

    故我们构建一个 a×b矩阵

    123bb+1b+2b+32b2b+12b+22b+33b(a1)b+1(a1)b+2(a1)b+3ab

    显然我们可以找到 φ(b) b 互质的数

    rbkb+rb,故只需 第一行的数与 b 互质,则后面对应列的数一定与 b 互质)

    同时 每一列都是 n 的完全剩余系,故 每一列有 φ(a) 个与 a 互质的数

    于是有 φ(a)φ(b) 个数 与 a,b 均互质,则有 φ(a)φ(b) 个数与 ab 互质

    故有 φ(a)φ(b)=φ(ab),即 积性函数 性质得证


    我们也可以通过 容斥 得到 φ(n)计算式

    φ(n)=n(11pi)

    可以感性理解成 对于 n 的每个质因子 pi1n 中有 n(11pi) 个数 不被其整除

    即 这些数与 n 没有 pi 这个公因数,对于剩下的数,继续考虑其被 pi+1 整除的可能

    从而

    φ(n)φ(m)=n(11pi)×m(11pj)=nm(11pi)=φ(nm)

  • 本质不同质因子个数:ω(n)=pP[pn]

    加性函数

    证明

    显然 ω(1)=pP[p1]=0

    a=i=1npi,b=i=1mqi

    pi (piP,pia),piP,同理 qiQ

    由于 ab,则 PQ=,故 |P|+|Q|=|P+Q|

    显然,ab 分解后的 质因数集合 即为 P+Q,而 集合大小 就是 ω 的值

    故有 ω(a)+ω(b)=ω(ab) 得证

  • 莫比乌斯函数:μ(n)

    μ(n)={1n=10d>1,d2n(1)ω(n)otherwise

    dnμ(d)=[n=1] [5]

    显然,n=1 时,dnμ(d)=1,否则设 n=i=1mpicid=i=1mpixi

    由定义,我们知道当 d平方因子 时,μ(d)=0,即 不做贡献

    故我们只需要考虑 xi{0,1}2m 种情况,设 d 存在 rxi1,则

    dnμ(d)=r=0m(mr)(1)r(n1)

    注意到 二项式定理

    (x+y)n=k=0n(nk)xnkyk

    容易发现,当 n=m,x=1,y=1 时,下式即 上式右半部分,于是

    dnμ(d)=(1+(1))m=0

    结束

    于是显然有 dgcd(i,j)μ(d)=[gcd(i,j)=1]

    积性函数

    证明

    显然 μ(1)=1,且若 a,b 有 等于 1 的,容易证明 μ(a)μ(b)=μ(ab)

    显然,若 a,b 中 有 满足 d>1,d2x,则 ab 一定满足此条件

    μ(ab)=μ(a)μ(b)=0,同样易得

    只需考虑 a,b 均为 最后一种情况 的情形

    容易发现,ω(n)加性函数,而 1常数,此形式符合 上文中提到的

    加性函数积性函数 的 转化 的式子形式,故 μ(n) 一定是 积性函数,得证

  • 总质因数个数:Ω(n)=pPc1[pcn]

    完全加性函数

    证明(可以回顾 完全加性函数的判定,与 加性函数 / 积性函数 的判断有所不同)

    先转化一下,有 Ω(n)=dZ[dn]=pPc1[pcn]

    显然有 Ω(1)=0,又由于 piP,故易得 Ω(pi)=1,然后颓狮子

    Ω(npi)=pPc1[pcnpi]=pPppic1[pcnpi]+c1[picnpi]=pPppic1[pcn]+c1[picnpi]=pPppic1[pcn]+c1[picn]+1=pPc1[pcn]+1=Ω(n)+Ω(pi)

    故得证,该函数为 完全加性函数

    同理可知,总质因数和:Ω(n)=pPc1pc×[pcn] 也是 完全加性函数

  • 模意义下的乘法逆元:n1(modp)

    完全积性函数pP

    根据 余数的可乘性 即可证明,前面 同余关系 章节中应有 相关应用

    更形式化的,显然有 a1b1=(ab)1(modp)并不要求 ab

  • 刘维尔函数:λ(n)=(1)Ω(n)

    完全积性函数

    上文知,Ω(n)完全加性函数,然后根据 加性函数积性函数 的 转化 即可得


3. 线性筛积性函数

前面的 素数 部分,线性筛(欧拉筛) 筛素数的算法

提供了一个 线性筛特殊性质积性函数[1,n]所有取值 的 基本框架

只要 积性函数 f 可以在 O(1) 时间计算 任意质数幂 处的取值 f(pk),就适用 这个框架

这是一个 充分不必要 条件,有弱化条件,如 O(k) 计算 f(pk) 也可以,但此处暂不提

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 ;
		}
	}
}

先来考虑 上述的线性筛 框架,容易发现 Prii 显然与 i 互质

于是我们可以在 标记 Vis 这一部分 算出对应的值

唯一的特例是 枚举到 i最小质因数(即 imodPrij=0)时,此时不满足 iPrij

我们需要把 i 除尽 其最小质因数,得到 i,显然 iPrii,于是就可以算了

但是如果每次在 imodPrij=0 时再来除的话,时间复杂度就会假

所以我们需要在过程中 预处理每个数 i最小质因子 pi最高次幂maxpic

最后就得到了 下面的代码框架

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. 引用资料

[0] Number Theory —— H_W_Y

[1] 定义域、值域和陪域 —— 数学乐

[2] 柯西方程 —— 百度百科

[3] 【数学】加性函数与积性函数 —— mango09(好得很的介绍)

[4] 数论 - 数论基础 - 积性函数 —— OI Wiki

[5] 莫比乌斯反演简要笔记 —— Sengxian

posted @   FAKUMARER  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示