基本数学理论知识
素数是数论中最为关心的基础,基本上所有的数论书籍都是围绕素数展开。
整数p>1是素数当且仅当它的因子只有 ±1 和 ±p。
任意整数a>1都可以唯一地因子分解为 a = p1a1 * p2a2 * …… *ptat,其中 p1 p2 pt 都是素数,且 p1 <p2<……< pt ,所有的ai都是正整数。
即任意的正整数a可唯一地表示为 a = ∏ pap 其中每一个ap ≥ 0 ,比如整数12 = { a2 = 2, a3 = 1},整数91 ={ a7 = 1, a13 = 1}
两数相乘即对应地指数相加。设 a = ∏ pap b = ∏ pbp ,定义k = ab。 k可以表示为 k = ∏ pkp ,kp = ap + bp
例如 k = 12 * 18 = ( 2^2 * 3 ) * ( 2 * 3^2 ) = 2^3 * 3^3 = 216 。k2 = a2 + b2 = 2 + 1, k3 = a3 + b3 = 1 + 2
1.1 费马定理
若p是素数,a是正整数且不能被p整数,则 ap-1 ≡ 1 mod p ,也可以用另一种形式表示 ap ≡ a mod p
比如 35 = 243 =3 mod 5 = a mod p
1.2 欧拉函数
欧拉函数 Φ(n),指的是小于n且与n互素地正整数的个数。一般Φ(1) = 1。
显然对于素数p, Φ(p) = p - 1
假设有两个素数p和q,p ≠ q,那么对于 n = pq, Φ(n) = Φ(pq) = Φ(p) * Φ(q) = (p -1)* (q - 1)
1.3 欧拉定理
欧拉定理说明,对任意的互素的a和n,有 a Φ(n) ≡ 1 mod n ,也可以用另一种形式表示 a Φ(n)+1 ≡ a mod n
1.4 中国剩余定理CRT
令M = ∏ mi,1 ≤ i ≤ k
其中mi是两两互素的,我们可以将ZM中任一整数对应一个k元组,该k元组的元素均在Zmi中,这种对应关系为 A ↔ (a1,a2,……,ak),A∈ZM,对于1 ≤ i ≤ k,ai∈ZM,且 ai = A mod mi
对于A ↔ (a1,a2,……,ak),B ↔ (b1,b2,……,bk),(A * B) mod M ↔ (a1*b1 mod m1 ,a2 * b2 mod m2,……,ak * bk mod mk)
中国剩余定理的用途之一就是可以使得模M的大数运算转化到更小的数上操作
比如 A = 973 mod M = 1813 = 37 * 49 = m1 * m2,Mi = M / mi,则 M1 = 49,M2 =37
973 mod 37 = 11,973 mod 49 = 42,所以973可以表示为 (11,42)
如果此时有678 + 973 mod 1813,则可以通过678 ↔ (678 mod 37,678 mod 49) ↔ (12,41) ,(11 + 12 mod 37,42 + 41 mod 49)= (23,24)↔ a1M1M1-1 + a2M2M2-1 mod M ↔ 23 * 49 * 34 + 34 * 37 *4 mod 1813 = 43350 mod 1813 = 1651,其中M1是M1模m1的乘法逆,即M1-1 = 34 mod M1
如果此时有73 * 1651 mod 1813,先73 * (23,24) ↔ (73 * 23 mod 37,73 * 24 mod 49)=(14,32)
(14,32) ↔ 14 * 49 * 34 + 32 * 37 * 4 mod 1813 = 856 = 1651 * 73 mod 1813
1.5 离散对数
1.5.1 模n的整数幂
根据欧拉定理 a Φ(n) ≡ 1 mod n,其中欧拉函数 Φ(n),指的是小于n且与n互素地正整数的个数。
考虑欧拉定理更一般的形式:a m ≡ 1 mod n,若a与n互素,则至少有一个整数m满足M=Φ(n),我们称最小正幂m为下列之一:
- a 模 n 的阶
- a 所属的模 n 的指数
- a 所产生的周期长
如表所示给出了所有小于19的正整数a模19的幂,可以发现所有序列均以1结束;每个序列的周期长都可以整数Φ(19)=18,即每一行都有整数个子序列;有一些序列长度为18,这时我们说底a生成模19的非零整数集,并称这样的整数为模数19的本原根。
更一般来说,我们说Φ(n)是一个数所属的模n的可能的最高指数。如果一个数的阶为Φ(n),则称之为n的本原跟。本原跟的奇特之处在于若a是n的本原跟,则a1,a2,……,aΦ(n) 模n是各不相同的,且均与n互素。素数19的本原跟为2,3,10,13,14,15。
并不是所有整数都有本原跟,事实上,只有形如2,4,pα,2pα的整数才有本原跟,p是任何素数,α是正整数。
1.5.2 模算术对数
对于底数x和数y,y=x logx(y)
对数有以下性质:
- logx(1) = 0
- logx(x) = 1
- logx(yz) = logx(y) + logx(z)
- logx(yr) = r * logx(y)
对素数p的本原跟a,a的1到p-1次方幂可产生[1,p-1]的每一个整数一次。而对任何整数b,根据模算术定义,b ≡ r mod p,一定有唯一的幂i使得 b ≡ ai mod p,0 ≤ i ≤ p - 1,这里的i称为以a为底(模p)b的离散对数,记为dloga,p(b)。而dloga,p(1) = 0,dloga,p(a) = 1。
由于 x = a dloga,p(x) mod p,y = a dloga,p(y) mod p,xy = a dloga,p(xy) mod p,由模乘的性质 xy mod p = (x mod p)(y mod p)mod p,a dloga,p(xy) mod p = (a dloga,p(x) mod p) * ( a dloga,p(y) mod p) = a dloga,p(x) + dloga,p(y) mod p
根据欧拉定理,对任何互素的a和n,有a Φ(n) ≡ 1 mod n,任何正整数z可以表示为z = q + kΦ(n),所以若 z ≡ q mod Φ(n),则a z ≡ a q mod n
代入前式有 dloga,p(xy) ≡ dloga,p(x) + dloga,p(y) mod Φ(p),则 dloga,p(yr) ≡ r * dloga,p(y) mod Φ(p)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效