数论基础
本文对于数论的开头部分做一个简介。
整除
定义
设 𝑎,𝑏 ∈𝐙
,𝑎 ≠0
。如果 ∃𝑞 ∈𝐙
,使得 𝑏 =𝑎𝑞
,那么就说 𝑏
可被 𝑎
整除,记作 𝑎 ∣𝑏
;𝑏
不被 𝑎
整除记作 𝑎 ∤𝑏
。
整除的性质:
- 𝑎 ∣𝑏 ⟺ −𝑎 ∣𝑏 ⟺ 𝑎 ∣ −𝑏 ⟺ |𝑎| ∣|𝑏|

- 𝑎 ∣𝑏 ∧𝑏 ∣𝑐 ⟹ 𝑎 ∣𝑐

- 𝑎 ∣𝑏 ∧𝑎 ∣𝑐 ⟺ ∀𝑥,𝑦 ∈𝐙,𝑎 ∣(𝑥𝑏 +𝑦𝑐)

- 𝑎 ∣𝑏 ∧𝑏 ∣𝑎 ⟹ 𝑏 = ±𝑎

- 设 𝑚 ≠0
,那么 𝑎 ∣𝑏 ⟺ 𝑚𝑎 ∣𝑚𝑏
。 - 设 𝑏 ≠0
,那么 𝑎 ∣𝑏 ⟹ |𝑎| ≤|𝑏|
。 - 设 𝑎 ≠0,𝑏 =𝑞𝑎 +𝑐
,那么 𝑎 ∣𝑏 ⟺ 𝑎 ∣𝑐
。
约数
定义
若 𝑎 ∣𝑏
,则称 𝑏
是 𝑎
的 倍数,𝑎
是 𝑏
的 约数。
0
是所有非 0
整数的倍数。对于整数 𝑏 ≠0
,𝑏
的约数只有有限个。
平凡约数(平凡因数):对于整数 𝑏 ≠0
,±1
、±𝑏
是 𝑏
的平凡约数。当 𝑏 = ±1
时,𝑏
只有两个平凡约数。
对于整数 𝑏 ≠0
,𝑏
的其他约数称为真约数(真因数、非平凡约数、非平凡因数)。
约数的性质:
- 设整数 𝑏 ≠0
。当 𝑑
遍历 𝑏
的全体约数的时候,𝑏𝑑
也遍历 𝑏
的全体约数。 - 设整数 𝑏 >0
,则当 𝑑
遍历 𝑏
的全体正约数的时候,𝑏𝑑
也遍历 𝑏
的全体正约数。
在具体问题中,如果没有特别说明,约数总是指正约数。
带余数除法
余数
设 𝑎,𝑏
为两个给定的整数,𝑎 ≠0
。设 𝑑
是一个给定的整数。那么,一定存在唯一的一对整数 𝑞
和 𝑟
,满足 𝑏 =𝑞𝑎 +𝑟,𝑑 ≤𝑟 <|𝑎| +𝑑
。
无论整数 𝑑
取何值,𝑟
统称为余数。𝑎 ∣𝑏
等价于 𝑎 ∣𝑟
。
一般情况下,𝑑
取 0
,此时等式 𝑏 =𝑞𝑎 +𝑟,0 ≤𝑟 <|𝑎|
称为带余数除法(带余除法)。这里的余数 𝑟
称为最小非负余数。
余数往往还有两种常见取法:
- 绝对最小余数:𝑑
取 𝑎
的绝对值的一半的相反数。即 𝑏 =𝑞𝑎 +𝑟, −|𝑎|2 ≤𝑟 <|𝑎| −|𝑎|2
。 - 最小正余数:𝑑
取 1
。即 𝑏 =𝑞𝑎 +𝑟,1 ≤𝑟 <|𝑎| +1
。
带余数除法的余数只有最小非负余数。如果没有特别说明,余数总是指最小非负余数。
余数的性质:
- 任一整数被正整数 𝑎
除后,余数一定是且仅是 0
到 (𝑎 −1)
这 𝑎
个数中的一个。 - 相邻的 𝑎
个整数被正整数 𝑎
除后,恰好取到上述 𝑎
个余数。特别地,一定有且仅有一个数被 𝑎
整除。
最大公约数与最小公倍数
关于公约数、公倍数、最大公约数与最小公倍数,四个名词的定义,见 最大公约数。
Warning
一些作者认为 0
和 0
的最大公约数无定义,其余作者一般将其视为 0
。C++ STL 的实现中采用后者,即认为 0
和 0
的最大公约数为 0
。
最大公约数有如下性质:
- (𝑎1,…,𝑎𝑛) =(|𝑎1|,…,|𝑎𝑛|)
; - (𝑎,𝑏) =(𝑏,𝑎)
; - 若 𝑎 ≠0
,则 (𝑎,0) =(𝑎,𝑎) =|𝑎|
; - (𝑏𝑞 +𝑟,𝑏) =(𝑟,𝑏)
; - (𝑎1,…,𝑎𝑛) =((𝑎1,𝑎2),𝑎3,…,𝑎𝑛)
。进而 ∀1 <𝑘 <𝑛 −1, (𝑎1,…,𝑎𝑛) =((𝑎1,…,𝑎𝑘),(𝑎𝑘+1,…,𝑎𝑛))
; - 对不全为 0
的整数 𝑎1,…,𝑎𝑛
和非零整数 𝑚
,(𝑚𝑎1,…,𝑚𝑎𝑛) =|𝑚|(𝑎1,…,𝑎𝑛)
; - 对不全为 0
的整数 𝑎1,…,𝑎𝑛
,若 (𝑎1,…,𝑎𝑛) =𝑑
,则 (𝑎1/𝑑,…,𝑎𝑛/𝑑) =1
; - (𝑎𝑛,𝑏𝑛) =(𝑎,𝑏)𝑛
。
最大公约数还有如下与互素相关的性质:
- 若 𝑏|𝑎𝑐
且 (𝑎,𝑏) =1
,则 𝑏 ∣𝑐
; - 若 𝑏|𝑐
、𝑎|𝑐
且 (𝑎,𝑏) =1
,则 𝑎𝑏 ∣𝑐
; - 若 (𝑎,𝑏) =1
,则 (𝑎,𝑏𝑐) =(𝑎,𝑐)
; - 若 (𝑎𝑖,𝑏𝑗) =1, ∀1 ≤𝑖 ≤𝑛,1 ≤𝑗 ≤𝑚
,则 (∏𝑖𝑎𝑖,∏𝑗𝑏𝑗) =1
。特别地,若 (𝑎,𝑏) =1
,则 (𝑎𝑛,𝑏𝑚) =1
; - 对整数 𝑎1,…,𝑎𝑛
,若 ∃𝑣 ∈𝐙, ∏𝑖𝑎𝑖 =𝑣𝑚
,且 (𝑎𝑖,𝑎𝑗) =1, ∀𝑖 ≠𝑗
,则 ∀1 ≤𝑖 ≤𝑛, 𝑚√𝑎𝑖 ∈𝐙
。
最小公倍数有如下性质:
- [𝑎1,…,𝑎𝑛] =[|𝑎1|,…,|𝑎𝑛|]
; - [𝑎,𝑏] =[𝑏,𝑎]
; - 若 𝑎 ≠0
,则 [𝑎,1] =[𝑎,𝑎] =|𝑎|
; - 若 𝑎 ∣𝑏
,则 [𝑎,𝑏] =|𝑏|
; - [𝑎1,…,𝑎𝑛] =[[𝑎1,𝑎2],𝑎3,…,𝑎𝑛]
。进而 ∀1 <𝑘 <𝑛 −1, [𝑎1,…,𝑎𝑛] =[[𝑎1,…,𝑎𝑘],[𝑎𝑘+1,…,𝑎𝑛]]
; - 若 𝑎𝑖 ∣𝑚, ∀1 ≤𝑖 ≤𝑛
,则 [𝑎1,…,𝑎𝑛] ∣𝑚
; - [𝑚𝑎1,…,𝑚𝑎𝑛] =|𝑚|[𝑎1,…,𝑎𝑛]
; - [𝑎,𝑏,𝑐][𝑎𝑏,𝑏𝑐,𝑐𝑎] =[𝑎,𝑏][𝑏,𝑐][𝑐,𝑎]
; - [𝑎𝑛,𝑏𝑛] =[𝑎,𝑏]𝑛
。
最大公约数和最小公倍数可以组合出很多奇妙的等式,如:
- (𝑎,𝑏)[𝑎,𝑏] =|𝑎𝑏|
; - (𝑎𝑏,𝑏𝑐,𝑐𝑎)[𝑎,𝑏,𝑐] =|𝑎𝑏𝑐|
; - (𝑎,𝑏,𝑐)2(𝑎,𝑏)(𝑏,𝑐)(𝑎,𝑐) =[𝑎,𝑏,𝑐]2[𝑎,𝑏][𝑏,𝑐][𝑎,𝑐]
。
这些性质均可通过定义或 唯一分解定理 证明,其中使用唯一分解定理的证明更容易理解。
互素
定义
若 (𝑎1,𝑎2) =1
,则称 𝑎1
和 𝑎2
互素(既约)。
若 (𝑎1,…,𝑎𝑘) =1
,则称 𝑎1,…,𝑎𝑘
互素(既约)。
多个整数互素,不一定两两互素。例如 6
、10
和 15
互素,但是任意两个都不互素。
互素的性质与最大公约数理论:裴蜀定理(Bézout's identity)。见 裴蜀定理。
辗转相除法
辗转相除法是一种算法,也称 Euclid 算法。见 最大公约数。
素数与合数
关于素数的算法见 素数。
定义
设整数 𝑝 ≠0, ±1
。如果 𝑝
除了平凡约数外没有其他约数,那么称 𝑝
为 素数(不可约数)。
若整数 𝑎 ≠0, ±1
且 𝑎
不是素数,则称 𝑎
为 合数。
𝑝
和 −𝑝
总是同为素数或者同为合数。如果没有特别说明,素数总是指正的素数。
整数的因数是素数,则该素数称为该整数的素因数(素约数)。
素数与合数的简单性质:
- 大于 1
的整数 𝑎
是合数,等价于 𝑎
可以表示为整数 𝑑
和 𝑒
(1 <𝑑,𝑒 <𝑎
)的乘积。 - 如果素数 𝑝
有大于 1
的约数 𝑑
,那么 𝑑 =𝑝
。 - 大于 1
的整数 𝑎
一定可以表示为素数的乘积。 - 对于合数 𝑎
,一定存在素数 𝑝 ≤√𝑎
使得 𝑝 ∣𝑎
。 - 素数有无穷多个。
- 所有大于 3
的素数都可以表示为 6𝑛 ±1
的形式。
算术基本定理
算术基本引理
设 𝑝
是素数,𝑝 ∣𝑎1𝑎2
,那么 𝑝 ∣𝑎1
和 𝑝 ∣𝑎2
至少有一个成立。
算术基本引理的逆命题稍加修改也可以得到素数的另一种定义。
素数的另一种定义
对整数 𝑝 ≠0, ±1
,若对任意满足 𝑝 ∣𝑎1𝑎2
的整数 𝑎1,𝑎2
均有 𝑝 ∣𝑎1
或 𝑝 ∣𝑎2
成立,则称 𝑝
是素数。
Tip
这个定义的动机可以从 素理想 中找到。
算术基本定理(唯一分解定理)
设正整数 𝑎
,那么必有表示:
𝑎=𝑝1𝑝2⋯𝑝𝑠
其中 𝑝𝑗(1 ≤𝑗 ≤𝑠)
是素数。并且在不计次序的意义下,该表示唯一。
标准素因数分解式
将上述表示中,相同的素数合并,可得:
𝑎=𝑝1𝛼1𝑝2𝛼2⋯𝑝𝑠𝛼𝑠,𝑝1<𝑝2<⋯<𝑝𝑠
称为正整数 𝑎
的标准素因数分解式。
算术基本定理和算术基本引理,两个定理是等价的。
同余
定义
设整数 𝑚 ≠0
。若 𝑚 ∣(𝑎 −𝑏)
,称 𝑚
为 模数(模),𝑎
同余于 𝑏
模 𝑚
,𝑏
是 𝑎
对模 𝑚
的 剩余。记作 𝑎 ≡𝑏(mod𝑚)
。
否则,𝑎
不同余于 𝑏
模 𝑚
,𝑏
不是 𝑎
对模 𝑚
的剩余。记作 𝑎 ≢𝑏(mod𝑚)
。
这样的等式,称为模 𝑚
的同余式,简称 同余式。
根据整除的性质,上述同余式也等价于 𝑎 ≡𝑏(mod( −𝑚))
。
后文中,如果没有特别说明,模数总是 正整数。
式中的 𝑏
是 𝑎
对模 𝑚
的剩余,这个概念与余数完全一致。通过限定 𝑏
的范围,相应的有 𝑎
对模 𝑚
的最小非负剩余、绝对最小剩余、最小正剩余。
同余的性质:
- 同余是 等价关系,即同余具有
- 自反性:𝑎 ≡𝑎(mod𝑚)
。 - 对称性:若 𝑎 ≡𝑏(mod𝑚)
,则 𝑏 ≡𝑎(mod𝑚)
。 - 传递性:若 𝑎 ≡𝑏(mod𝑚),𝑏 ≡𝑐(mod𝑚)
,则 𝑎 ≡𝑐(mod𝑚)
。
- 线性运算:若 𝑎,𝑏,𝑐,𝑑 ∈𝐙,𝑚 ∈𝐍∗,𝑎 ≡𝑏(mod𝑚),𝑐 ≡𝑑(mod𝑚)
则有:- 𝑎 ±𝑐 ≡𝑏 ±𝑑(mod𝑚)
。 - 𝑎 ×𝑐 ≡𝑏 ×𝑑(mod𝑚)
。
- 设 𝑓(𝑥) =∑𝑛𝑖=0𝑎𝑖𝑥𝑖
和 𝑔(𝑥) =∑𝑛𝑖=0𝑏𝑖𝑥𝑖
是两个整系数多项式,𝑚 ∈𝐍∗
,且 𝑎𝑖 ≡𝑏𝑖(mod𝑚), 0 ≤𝑖 ≤𝑛
,则对任意整数 𝑥
均有 𝑓(𝑥) ≡𝑔(𝑥)(mod𝑚)
。进而若 𝑠 ≡𝑡(mod𝑚)
,则 𝑓(𝑠) ≡𝑔(𝑡)(mod𝑚)
。 - 若 𝑎,𝑏 ∈𝐙,𝑘,𝑚 ∈𝐍∗,𝑎 ≡𝑏(mod𝑚)
, 则 𝑎𝑘 ≡𝑏𝑘(mod𝑚𝑘)
。 - 若 𝑎,𝑏 ∈𝐙,𝑑,𝑚 ∈𝐍∗,𝑑 ∣𝑎,𝑑 ∣𝑏,𝑑 ∣𝑚
,则当 𝑎 ≡𝑏(mod𝑚)
成立时,有 𝑎𝑑 ≡𝑏𝑑(mod𝑚𝑑)
。 - 若 𝑎,𝑏 ∈𝐙,𝑑,𝑚 ∈𝐍∗,𝑑 ∣𝑚
,则当 𝑎 ≡𝑏(mod𝑚)
成立时,有 𝑎 ≡𝑏(mod𝑑)
。 - 若 𝑎,𝑏 ∈𝐙,𝑑,𝑚 ∈𝐍∗
,则当 𝑎 ≡𝑏(mod𝑚)
成立时,有 (𝑎,𝑚) =(𝑏,𝑚)
。若 𝑑
能整除 𝑚
及 𝑎,𝑏
中的一个,则 𝑑
必定能整除 𝑎,𝑏
中的另一个。
还有性质是乘法逆元。见 乘法逆元。
C/C++ 的整数除法和取模运算
在 C/C++ 中,整数除法和取模运算,与数学上习惯的取模和除法不一致。
对于所有标准版本的 C/C++,规定在整数除法中:
- 当除数为 0 时,行为未定义;
- 否则
(a / b) * b + a % b
的运算结果与 a
相等。
也就是说,取模运算的符号取决于除法如何取整;而除法如何取整,这是实现定义的(由编译器决定)。
从 C99和 C++11标准版本起,规定 商向零取整(舍弃小数部分);取模的符号即与被除数相同。从此以下运算结果保证为真:
| 5 % 3 == 2;
5 % -3 == 2;
-5 % 3 == -2;
-5 % -3 == -2;
|
快速乘
在素性测试与质因数分解中,经常会遇到模数在 long long
范围内的乘法取模运算。为了避免运算中的整型溢出问题,本节介绍一种可以处理模数在 long long
范围内,不需要使用 __int128
且复杂度为 𝑂(1)
的「快速乘」。
我们发现:
𝑎×𝑏mod𝑚=𝑎×𝑏−⌊𝑎𝑏𝑚⌋×𝑚
我们巧妙运用 unsigned long long
的自然溢出:
𝑎×𝑏mod𝑚=𝑎×𝑏−⌊𝑎𝑏𝑚⌋×𝑚=(𝑎×𝑏−⌊𝑎𝑏𝑚⌋×𝑚)mod264
于是在算出 ⌊𝑎𝑏𝑚⌋
后,两边的乘法和中间的减法部分都可以使用 unsigned long long
直接计算,现在我们只需要解决如何计算 ⌊𝑎𝑏𝑚⌋
。
我们考虑先使用 long double
算出 𝑎𝑚
再乘上 𝑏
。
既然使用了 long double
,就无疑会有精度误差。极端情况就是第一个有效数字(二进制下)在小数点后一位。在 64 位系统中,long double
通常表示为 80
位扩展精度浮点数(即符号为 1
位,指数为 15
位,尾数为 64
位),所以 long double
最多能精确表示的有效位数为 64
。所以 𝑎𝑚
最差从第 65
位开始出错,误差范围为 (−2−64,2−64)
。乘上 𝑏
这个 64
位整数,误差范围为 ( −0.5,0.5)
,再加上 0.5
误差范围为 (0,1)
,取整后误差范围位 {0,1}
。于是乘上 −𝑚
后,误差范围变成 {0, −𝑚}
,我们需要判断这两种情况。
因为 𝑚
在 long long
范围内,所以如果计算结果 𝑟
在 [0,𝑚)
时,直接返回 𝑟
,否则返回 𝑟 +𝑚
,当然你也可以直接返回 (𝑟 +𝑚)mod𝑚
。
代码实现如下:
| long long binmul(long long a, long long b, long long m) {
unsigned long long c =
(unsigned long long)a * b -
(unsigned long long)((long double)a / m * b + 0.5L) * m;
if (c < m) return c;
return c + m;
}
|
如今,绝大多数测评系统所配备的 C/C++ 编译器已支持 __int128
类型,因此也可以利用 Barrett Reduction 进行快速乘。之所以不直接将乘数类型提升至 __int128
后取模计算是因为此方法仍然可以节省一次时间可观的 __int128
类型取模。
同余类与剩余系
为方便讨论,对集合 𝐴,𝐵
和元素 𝑟
,我们引入如下记号:
- 𝑟 +𝐴 :={𝑟 +𝑎 :𝑎 ∈𝐴}
; - 𝑟𝐴 :={𝑟𝑎 :𝑎 ∈𝐴}
; - 𝐴 +𝐵 :={𝑎 +𝑏 :𝑎 ∈𝐴,𝑏 ∈𝐵}
; - 𝐴𝐵 :={𝑎𝑏 :𝑎 ∈𝐴,𝑏 ∈𝐵}
。
同余类
对非零整数 𝑚
,把全体整数分成 |𝑚|
个两两不交的集合,且同一个集合中的任意两个数模 𝑚
均同余,我们把这 |𝑚|
个集合均称为模 𝑚
的 同余类 或 剩余类。用 𝑟mod𝑚
表示含有整数 𝑟
的模 𝑚
的同余类。
不难证明对任意非零整数 𝑚
,上述划分方案一定存在且唯一。
由同余类的定义可知:
- 𝑟mod𝑚 ={𝑟 +𝑘𝑚 :𝑘 ∈𝐙}
; - 𝑟mod𝑚 =𝑠mod𝑚 ⟺ 𝑟 ≡𝑠(mod𝑚)
; - 对任意 𝑟,𝑠 ∈𝐙
,要么 𝑟mod𝑚 =𝑠mod𝑚
,要么 (𝑟mod𝑚) ∩(𝑠mod𝑚) =∅
; - 若 𝑚1 ∣𝑚
,则对任意整数 𝑟
均有 𝑟 +𝑚𝐙 ⊆𝑟 +𝑚1𝐙
。
注意到同余是等价关系,所以同余类即为同余关系的等价类。
我们把模 𝑚
的同余类全体构成的集合记为 𝐙𝑚
,即
𝐙𝑚:={𝑟mod𝑚:0≤𝑟<𝑚}
不难发现:
- 对任意整数 𝑎
,𝑎 +𝐙𝑚 =𝐙𝑚
; - 对任意与 𝑚
互质的整数 𝑏
,𝑏𝐙𝑚 =𝐙𝑚
。
由 商群 的定义可知 𝐙𝑚 =𝐙/𝑚𝐙
,所以有时我们也会用 𝐙/𝑚𝐙
表示 𝐙𝑚
。
由 抽屉原理 可知:
- 任取 𝑚 +1
个整数,必有两个整数模 𝑚
同余。 - 存在 𝑚
个两两模 𝑚
不同余的整数。
由此我们给出完全剩余系的定义:
(完全)剩余系
对 𝑚
个整数 𝑎1,𝑎2,…,𝑎𝑚
,若对任意的数 𝑥
,有且仅有一个数 𝑎𝑖
使得 𝑥
与 𝑎𝑖
模 𝑚
同余,则称这 𝑚
个整数 𝑎1,𝑎2,…,𝑎𝑚
为模 𝑚
的 完全剩余系,简称 剩余系。
我们还可以定义模 𝑚
的:
- 最小非负(完全)剩余系:0,…,𝑚 −1
; - 最小正(完全)剩余系:1,…,𝑚
; - 绝对最小(完全)剩余系:−⌊𝑚/2⌋,…, −⌊ −𝑚/2⌋ −1
; - 最大非正(完全)剩余系:−𝑚 +1,…,0
; - 最大负(完全)剩余系:−𝑚,…, −1
。
若无特殊说明,一般我们只用最小非负剩余系。
我们注意到如下命题成立:
- 在模 𝑚
的任意一个同余类中,任取两个整数 𝑎1,𝑎2
均有 (𝑎1,𝑚) =(𝑎2,𝑚)
。
考虑同余类 𝑟mod𝑚
,若 (𝑟,𝑚) =1
,则该同余类的所有元素均与 𝑚
互质,这说明我们也许可以通过类似方式得知所有与 𝑚
互质的整数构成的集合的结构。
既约同余类
对同余类 𝑟mod𝑚
,若 (𝑟,𝑚) =1
,则称该同余类为 既约同余类 或 既约剩余类。
我们把模 𝑚
既约剩余类的个数记作 𝜑(𝑚)
,称其为 Euler 函数。
我们把模 𝑚
的既约同余类全体构成的集合记为 𝐙∗𝑚
,即
𝐙∗𝑚:={𝑟mod𝑚:0≤𝑟<𝑚,(𝑟,𝑚)=1}
Warning
对于任意的整数 𝑎
和与 𝑚
互质的整数 𝑏
,𝑏𝐙∗𝑚 =𝐙∗𝑚
,但是 𝑎 +𝐙∗𝑚
不一定为 𝐙∗𝑚
。这一点与 𝐙𝑚
不同。
由 抽屉原理 可知:
- 任取 𝜑(𝑚) +1
个与 𝑚
互质的整数,必有两个整数模 𝑚
同余。 - 存在 𝜑(𝑚)
个与 𝑚
互质且两两模 𝑚
不同余的整数。
由此我们给出既约剩余系的定义:
既约剩余系
对 𝑡 =𝜑(𝑚)
个整数 𝑎1,𝑎2,…,𝑎𝑡
,若 (𝑎𝑖,𝑚) =1, ∀1 ≤𝑖 ≤𝑡
,且对任意满足 (𝑥,𝑚) =1
的数 𝑥
,有且仅有一个数 𝑎𝑖
使得 𝑥
与 𝑎𝑖
模 𝑚
同余,则称这 𝑡
个整数 𝑎1,𝑎2,…,𝑎𝑡
为模 𝑚
的 既约剩余系、缩剩余系 或 简化剩余系。
类似地,我们也可以定义最小非负既约剩余系等概念。
若无特殊说明,一般我们只用最小非负既约剩余系。
剩余系的复合
对正整数 𝑚
,我们有如下定理:
若 𝑚 =𝑚1𝑚2, 1 ≤𝑚1,𝑚2
,令 𝑍𝑚1,𝑍𝑚2
分别为模 𝑚1,𝑚2
的 完全 剩余系,则对任意与 𝑚1
互质的 𝑎
均有:
𝑍𝑚=𝑎𝑍𝑚1+𝑚1𝑍𝑚2.
为模 𝑚
的 完全 剩余系。进而,若 𝑚 =∏𝑘𝑖=1𝑚𝑖, 1 ≤𝑚1,𝑚2,…,𝑚𝑘
,令 𝑍𝑚1,…,𝑍𝑚𝑘
分别为模 𝑚1,…,𝑚𝑘
的 完全 剩余系,则:
𝑍𝑚=𝑘∑𝑖=1(𝑖−1∏𝑗=1𝑚𝑗)𝑍𝑚𝑖.
为模 𝑚
的 完全 剩余系。
证明
只需证明对任意满足 𝑎𝑥 +𝑚1𝑦 ≡𝑎𝑥′ +𝑚1𝑦′(mod𝑚1𝑚2)
的 𝑥,𝑥′ ∈𝑍𝑚1
,𝑦,𝑦′ ∈𝑍𝑚2
,都有:
𝑎𝑥+𝑚1𝑦=𝑎𝑥′+𝑚1𝑦′.
实际上,由 𝑚1 ∣𝑚1𝑚2
,我们有 𝑎𝑥 +𝑚1𝑦 ≡𝑎𝑥′ +𝑚1𝑦′(mod𝑚1)
,进而 𝑎𝑥 ≡𝑎𝑥′(mod𝑚1)
,由 (𝑎,𝑚1) =1
可知 𝑥 ≡𝑥′(mod𝑚1)
,进而有 𝑥 =𝑥′
。
进一步,𝑚1𝑦 ≡𝑚1𝑦′(mod𝑚1𝑚2)
,则 𝑦 ≡𝑦′(mod𝑚2)
,即 𝑦 =𝑦′
。
因此,
𝑎𝑥+𝑚1𝑦=𝑎𝑥′+𝑚1𝑦′.
若 𝑚 =𝑚1𝑚2, 1 ≤𝑚1,𝑚2,(𝑚1,𝑚2) =1
,令 𝑍∗𝑚1,𝑍∗𝑚2
分别为模 𝑚1,𝑚2
的 既约 剩余系,则:
𝑍∗𝑚=𝑚2𝑍∗𝑚1+𝑚1𝑍∗𝑚2.
为模 𝑚
的 既约 剩余系。
Tip
该定理等价于证明 Euler 函数为 积性函数。
证明
令 𝑍𝑚1,𝑍𝑚2
分别为模 𝑚1,𝑚2
的完全剩余系,我们已经证明了
𝑍𝑚=𝑚2𝑍𝑚1+𝑚1𝑍𝑚2
为模 𝑚
的完全剩余系。令 𝑀 ={𝑎 ∈𝑍𝑚 :(𝑎,𝑚) =1} ⊆𝑍𝑚
,显然 𝑀
为模 𝑚
的既约剩余系,所以我们只需证明 𝑀 =𝑍∗𝑚
即可。
显然 𝑍∗𝑚 ⊆𝑍𝑚
。
任取 𝑚2𝑥 +𝑚1𝑦 ∈𝑀
,其中 𝑥 ∈𝑍𝑚1
且 𝑦 ∈𝑍𝑚2
,有 (𝑚2𝑥 +𝑚1𝑦,𝑚1𝑚2) =1
,由 (𝑚1,𝑚2) =1
可得
1=(𝑚2𝑥+𝑚1𝑦,𝑚1)=(𝑚2𝑥,𝑚1)=(𝑥,𝑚1),
1=(𝑚2𝑥+𝑚1𝑦,𝑚2)=(𝑚1𝑦,𝑚2)=(𝑦,𝑚2).
因此可得 𝑥 ∈𝑍∗𝑚1
且 𝑦 ∈𝑍∗𝑚2
,即 𝑀 ⊆𝑍∗𝑚
。
任取 𝑚2𝑥 +𝑚1𝑦 ∈𝑍∗𝑚
,其中 𝑥 ∈𝑍∗𝑚1
且 𝑦 ∈𝑍∗𝑚2
,有 (𝑥,𝑚1) =1
且 (𝑦,𝑚2) =1
,由 (𝑚1,𝑚2) =1
可得
(𝑚2𝑥+𝑚1𝑦,𝑚1)=(𝑚2𝑥,𝑚1)=(𝑥,𝑚1)=1,
(𝑚2𝑥+𝑚1𝑦,𝑚2)=(𝑚1𝑦,𝑚2)=(𝑥,𝑚2)=1,
因此可得 (𝑚2𝑥 +𝑚1𝑦,𝑚1𝑚2) =1
,即 𝑍∗𝑚 ⊆𝑀
。
综上所述,
𝑍∗𝑚=𝑚2𝑍∗𝑚1+𝑚1𝑍∗𝑚2.
为模 𝑚
的 既约 剩余系。
数论函数
数论函数(也称算数函数)指定义域为正整数的函数。数论函数也可以视作一个数列。
积性函数
定义
在数论中,若函数 𝑓(𝑛)
满足 𝑓(1) =1
,且 𝑓(𝑥𝑦) =𝑓(𝑥)𝑓(𝑦)
对任意互质的 𝑥,𝑦 ∈𝐍∗
都成立,则 𝑓(𝑛)
为 积性函数。
在数论中,若函数 𝑓(𝑛)
满足 𝑓(1) =1
且 𝑓(𝑥𝑦) =𝑓(𝑥)𝑓(𝑦)
对任意的 𝑥,𝑦 ∈𝐍∗
都成立,则 𝑓(𝑛)
为 完全积性函数。
性质
若 𝑓(𝑥)
和 𝑔(𝑥)
均为积性函数,则以下函数也为积性函数:
ℎ(𝑥)=𝑓(𝑥𝑝)ℎ(𝑥)=𝑓𝑝(𝑥)ℎ(𝑥)=𝑓(𝑥)𝑔(𝑥)ℎ(𝑥)=∑𝑑∣𝑥𝑓(𝑑)𝑔(𝑥𝑑)
对正整数 𝑥
,设其唯一质因数分解为 𝑥 =∏𝑝𝑘𝑖𝑖
,其中 𝑝𝑖
为质数。
若 𝐹(𝑥)
为积性函数,则有 𝐹(𝑥) =∏𝐹(𝑝𝑘𝑖𝑖)
。
若 𝐹(𝑥)
为完全积性函数,则有 𝐹(𝑥) =∏𝐹(𝑝𝑘𝑖𝑖) =∏𝐹(𝑝𝑖)𝑘𝑖
。
例子
- 单位函数:𝜀(𝑛) =[𝑛 =1]
。(完全积性) - 恒等函数:id𝑘(𝑛) =𝑛𝑘
,id1(𝑛)
通常简记作 id(𝑛)
。(完全积性) - 常数函数:1(𝑛) =1
。(完全积性) - 除数函数:𝜎𝑘(𝑛) =∑𝑑∣𝑛𝑑𝑘
。𝜎0(𝑛)
通常简记作 𝑑(𝑛)
或 𝜏(𝑛)
,𝜎1(𝑛)
通常简记作 𝜎(𝑛)
。 - 欧拉函数:𝜑(𝑛) =∑𝑛𝑖=1[(𝑖,𝑛) =1]
。 - 莫比乌斯函数:𝜇(𝑛) =⎧{ {⎨{ {⎩1𝑛=10∃𝑑>1,𝑑2∣𝑛(−1)𝜔(𝑛)otherwise
,其中 𝜔(𝑛)
表示 𝑛
的本质不同质因子个数。
加性函数
定义
在数论中,若函数 𝑓(𝑛)
满足 𝑓(1) =0
且 𝑓(𝑥𝑦) =𝑓(𝑥) +𝑓(𝑦)
对任意互质的 𝑥,𝑦 ∈𝐍∗
都成立,则 𝑓(𝑛)
为 加性函数。
在数论中,若函数 𝑓(𝑛)
满足 𝑓(1) =0
且 𝑓(𝑥𝑦) =𝑓(𝑥) +𝑓(𝑦)
对任意的 𝑥,𝑦 ∈𝐍∗
都成立,则 𝑓(𝑛)
为 完全加性函数。
加性函数
本节中的加性函数指数论上的加性函数 (Additive function),应与代数中的 Additive map 做区分。
性质
对正整数 𝑥
,设其唯一质因数分解为 𝑥 =∏𝑝𝑘𝑖𝑖
,其中 𝑝𝑖
为质数。
若 𝐹(𝑥)
为加性函数,则有 𝐹(𝑥) =∑𝐹(𝑝𝑘𝑖𝑖)
。
若 𝐹(𝑥)
为完全加性函数,则有 𝐹(𝑥) =∑𝐹(𝑝𝑘𝑖𝑖) =∑𝐹(𝑝𝑖) ⋅𝑘𝑖
。
例子
为方便叙述,令所有质数组成的集合为 𝑃
.
- 所有质因子数目:Ω(𝑛) =∑𝑝∣𝑛[𝑝 ∈𝑃]∑⌈log𝑝𝑛⌉𝑘=1[𝑝𝑘 ∣𝑛 ∧𝑝𝑘+1 ∤𝑛] ⋅𝑘
。(完全加性) - 相异质因子数目:𝜔(𝑛) =∑𝑝∣𝑛[𝑝 ∈𝑃]
。 - 所有质因子之和:𝑎0(𝑛) =∑𝑝∣𝑛[𝑝 ∈𝑃]∑⌈log𝑝𝑛⌉𝑘=1[𝑝𝑘 ∣𝑛 ∧𝑝𝑘+1 ∤𝑛] ⋅𝑘𝑝
。(完全加性) - 相异质因子之和:𝑎1(𝑛) =∑𝑝∣𝑛[𝑝 ∈𝑃] ⋅𝑝
。
参考资料与注释
- 潘承洞,潘承彪。初等数论。北京大学出版社。
本页面最近更新:2025/9/14 21:22:43,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:Tiphereth-A, Enter-tainer, Great-designer, HeRaNO, ksyx, 383494, buuzzing, c-forrest, cr4c1an, Emp7iness, jifbt, Kaiser-Yang, Koishilll, Marcythm, Qiu-Quanzhi, Saisyc, sshwy, StarryReverie, StudyingFather, Xeonacid, xyf007
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用