集合是由不同对象组成的整体(collections of objects)的数学模型,这些对象被称为集合的元素(elements)。整数(Integers)、有理数(Rational numbers)、实数(Real numbers)、复数(Complex numbers)、矩阵(Matrices)、多项式(Polynomials)、多边形(Polygons)以及其他的很多概念实质上都是集合。
常用集合缩写: N 表示全体自然数集合(Natural numbers), Z 表示全体整数集合("Zahl" is Integer in German), Q 表示全体有理数集合(Rational numbers), R 表示全体实数集合(Real numbers), C 表示全体复数集合(Complex numbers)
集合的特点:无序性 ,互异性,确定性
有序对
集合的元素是无序的,有序对(order pairs)是从集合中产生的一种新的数据结构。在编程世界中,程序员更愿意称其为元组(tuple)。
那么如何在无序的集合中生成有序对呢?具体实现方式是将元组 (,)(a,b) 表示为集合形式 {,{}}{a,{b}} 。注意到,这样的集合的元素要么是字母,要么是基数为1的集合。于是,我们说 (,)≠(,)(a,b)=(b,a) ,因为 {,{}}≠{,{}}{a,{b}}={b,{a}} 。
注意有序对(元组)的元素数目可以是任意个。
定义两个集合 A 和 B,我们可以定义另一个集合 C ,其中 C 的元素是第一个元素来自于 A ,第二个元素来自于 B 的有序对。这样的集合我们称之为笛卡尔积(Cartesian product)。
笛卡尔积不遵循交换律。
借助笛卡尔积这个运算,我们就可以从数学角度上定义函数(function)。比如我们需要定义函数 f,满足 (1)=,(2)=,(3)=f(1)=x,f(2)=y,f(3)=z ,那么只需要定义两个集合 {1,2,3},{,,}{1,2,3},{x,y,z} ,二者进行笛卡尔积,并取结果的子集即可得到目标映射关系 (1,),(2,),(3,)(1,x),(2,y),(3,z)。
因此,在集合论中,函数就是域集(domain set)和共域集(codomain set)的笛卡尔积的子集。换句话说,
我们平常使用的除法是实数除法,两个整数相除的结果不一定是整数,比如 7÷5=1.47÷5=1.4 不是整数。因此,我们引入整数除法,也叫欧几里得除法(Euclidean Division)。它的结果由两部分组成:商(quotient)和余数(remainder)。欧几里得除法的定义:
对于整数 a 和 b(其中 ≠0b=0),存在唯一的整数对 (,)(q,r),使得 =+a=bq+r,其中 q 是商, r 是余数,且 0≤<∣∣0≤r<∣b∣。
如果 a 除以 b 的余数为零,则我们称 a 可以被 b 整除( b 整除 a),记为 ∣b∣a,我们可以称 b 为 a 的因数;若余数不为零,则记为 ∤b∤a。
质数(prime numbers)也称素数,定义如下:对于一个大于1的自然数,如果它不能被除了 11 和它本身之外的自然数整除,那么它就是质数。
我们可以把自然数分为质数和合数。合数与质数相对:对于一个大于1的自然数,除了1和它本身之外,还有其他正因数,那么它就是合数。例如,4、6、8、9都是合数。
寻找质数的确定性算法
1)埃拉托斯特尼筛法(Sieve of Eratosthenes)。它的逻辑非常简单:先确定一个要搜寻的范围,然后把从 00 到 n 之间的所有质数的倍数剔除掉,剩下的就是范围内的所有素数。寻找质数的随机性算法
- 费马素性检验
- 利用费马小定理来测试。
- 米勒-拉宾检验
质数在密码学中的应用
质数在密码学领域扮演着重要的角色,特别是在公钥密码学中。举个例子,RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,它使用了大质数的乘积作为公钥和私钥的一部分:计算质数的乘积很简单,但是将大合数分解为质因数非常困难,这保证了RSA加密算法的安全性。
欧几里得算法(也称辗转相除法)是我们用于计算两个整数的最大公约数的常用算法
算法步骤
- 令 r 为 a 除以 b 的余数,即 =mod
- 如果 r 不为零,则用 b 替换 a, r 替换 b,并返回第一步。
- 如果 r 为零,则 b 即为最大公约数。
例子
下面我们计算 a=30 和 b=24 的最大公约数:
第一步:运用欧几里得除法,得到 30=1⋅24+6
第二步:余数 r=6 不为零,用 替换 a, 替换 ,继续运用运用欧几里得除法,得到 24=4⋅6+0
第三步:上一步余数 r=0 为零,停止迭代,得到最大公约数 gcd(30,24)=6
拓展欧几里得算法
贝祖等式。对于两个整数 a 和 b,存在整数 x 和 y 使得它们满足如下等式:
+=gcd(,)
这个等式称为贝祖等式,其中 gcd(a,b) 是 a 和 b 的最大公约数。拓展欧几里得算法的目标就是找到这样的整数 x 和 y。
例子
下面我们计算使得 a=30 和 b=24 满足贝祖等式的整数 x 和 y:
+=gcd(,)
第一步:初始化 (−2,−1,−2,−1)=(1,0,0,1)
第二步:运用欧几里得除法,得到
30=1⋅24+6
这里 (0,0)=(1,6),代入 (,)(xi,yi) 迭代等式,有:
0=1−1×0=1
0=0−1×1=−1
此时 +=xia+yib=ri,等式左边为 30−24,右边 6,等式成立。
第三步:余数 =6r=6 不为零,用 b 替换 a, r 替换 b,继续运用欧几里得除法,得到
24=4⋅6+0
这里 (1,1)=(4,0)(q1,r1)=(4,0), 此时余数为0,停止迭代。得到最大公约数 gcd(30,24)=6gcd(30,24)=6, 而 (,)=(0,0)=(1,−1)(x,y)=(x0,y0)=(1,−1).
第四步:得到满足贝祖等式的系数 (,)=(1,−1)(x,y)=(1,−1),贝祖等式为:
−=6a−b=6
模幂
模幂指对模进行的幂运算,在密码学中很常用:
=mod b=acmodn
其中 0≤<0≤b
举个例子,给定 (,,)=(7,5,13)(a,c,n)=(7,5,13),我们可以计算得到 75=1680775=16807,除以 1313 余 1111,因此 =11b=11。
当然,模幂也可以写为同余的形式:
≡(mod)b≡ac(modn)
同余
同余是一种关系,在密码学中有广泛应用。在给定模数 n 的情况下,如果两个整数 a 和 b 取模后的结果相等,我们就称它们在模 n 下是同余的。记为:
≡(mod)a≡b(modn)
比如在模数 33 下,4 和 7 的余数均为 1,因此它们在模 3 下是同余的,写为 4≡7(mod3)4≡7(mod3)。但是在另一个模数 55 下,它们就不同余了,因此确认同余关系时必须给出模数。
费马小定理是数论中的一个重要定理,为解决模幂问题提供了有力的工具。
费马小定理指出,如果 p 是一个质数,则对于任意整数 a 是,有
≡(mod)ap≡a(modp)
也就是说 −ap−a 可以被 p 整除。举个例子, =3a=3 , =5p=5 ,有 35−3=240=48⋅535−3=240=48⋅5。
费马小定理还可以写成另一个形式。当 a 与 p 互质时,我们可以在等式左右两端同除以 a ,得到下面这个形式:
−1≡1(mod)ap−1≡1(modp)
也就是说 −1−1ap−1−1 可以被 p 整除。举个例子, =3a=3 , =5p=5 ,有 34−1=80=16⋅534−1=80=16⋅5。
中国剩余定理给出了一元线性同余方程组的解存在的条件和求解方法。
同余方程组
同余方程组是由多个同余方程组成的一组方程,每个方程都涉及模运算。
我们先看一个仅包含2个方程的例子:
≡2(mod3)x≡2(mod3)
≡3(mod5)x≡3(mod5)
通过观察,我们知道如果 y 是方程的解,那么 +15y+15 也是。通过穷举法,我们容易得到 =8y=8 是一个解,因此方程组的通解为 [8]15[8]15,也就是:
=8+15x=8+15k
其中 ∈k∈Z。
示例
让我们用中国剩余定理来解 3.23.2 中的示例:
≡2(mod3)x≡2(mod3)
≡3(mod5)x≡3(mod5)
有 =15pq=15, 1=3−1=2(mod5)p1=3−1=2(mod5), 1=5−1=2(mod3)q1=5−1=2(mod3)。所以:
≡2×5×2+3×3×2≡38≡8(mod15)x≡2×5×2+3×3×2≡38≡8(mod15)
与我们之前用穷举法得到的答案一样。
欧拉函数
欧拉函数为 ()=∣∗∣ϕ(n)=∣Zn∗∣,为单元集 ∗Zn∗ 中元素的个数。也就是 [1,...,−1][1,...,n−1] 中与 n 互质的整数的个数。另外,我们特别定义 (1)=1ϕ(1)=1。
举个几个例子: (2)=1ϕ(2)=1, (3)=2ϕ(3)=2, (5)=4ϕ(5)=4, (8)=4ϕ(8)=4, (9)=6ϕ(9)=6, (15)=8ϕ(15)=8。
欧拉定理将欧拉函数和幂运算的循环性质联系起来。
定理: 如果整数 a 和正整数 n 互质(即 gcd(,)=1gcd(a,n)=1),那么 ()≡1(mod)aϕ(n)≡1(modn)。
其中 ()ϕ(n) 是欧拉函数,也就是 [1,...,−1][1,...,n−1] 中与 n 互质的整数的个数。
继续使用上面的例子, =2,=5a=2,n=5,首先计算 (5)=5−1=4ϕ(5)=5−1=4,有 24≡16≡1(mod5)24≡16≡1(mod5), 符合欧拉定理。
再举个例子, =3,=7a=3,n=7,首先计算 (7)=7−1=6ϕ(7)=7−1=6,然后应用欧拉定理得到 36≡1(mod7)36≡1(mod7)。检查一下 36=72936=729,除 77 的余数为 11,欧拉定理正确。
03. 欧几里得算法 | WTF Academy