040 Linear Congruences
Linear Congruences
形式如下的式子, 其中 是整数, 是正整数, 是变量,被称为线性同余。
如何找到满足这个同余式子的 的值呢?一个办法是使用称为 模 的逆(inverse
),其满足 。
定理 1 如果 是互斥的整数且 ,那么 模 的逆存在,且逆模 是唯一的。也就是说,小于 的正整数 是唯一的,其他的逆与该值模 同余。
证明:根据 4.3 节定理 6,因为 ,那么存在 使得 这蕴涵着 因为 所以 这里的 即 模 的逆。
下面证明唯一性。假定还有一个 的正整数也满足 ,且 ,那么 根据 4.3 节定理 7,有 与假设矛盾。
如果 很小,测试小于 的正整数是否满足逆的属性即可。比如找 3 模 7 的逆,尝试 即可。一个便捷方法是当发现 时,可知 ,那么 是逆,因此 5 也是 3 模 7 的逆。
通用方法是根据 ,利用 4.3 节的两种不同方法求 即可。
有了 之后,求解 就很简单了:两边同乘 即可。
The Chinese Remainder Theorem
孙子曾提出一个问题:一个数,除以 3 余 2,除以 5 余 3,除以 7 余 2,问这个数是多少?
用现代数学语言描述是求满足下面同余方程的未知数 :
下面就讲解如何解决这个问题。
定理 2 中国剩余定理(THE CHINESE REMAINDER THEOREM
)
令 是两两互斥的正整数, 是任意整数,那么系统
模 有唯一解。也就是说,只有一个解 满足 ,其他解模 同余。
证明:TODO unique modulo m is Exercise 30。
下面构造出一个解。令 其中 。 时, 互斥,所以 。根据定理 1,存在一个整数 ,是模 的逆,即 那么 是系统的解。 时,。所以
上述证明过程给出了一个构造解的方法,不过实际计算会比较繁琐,下面通过例子讲解回代法(back substitution
)。
例 使用回代法求满足 的所有 。
解:根据 4.1 解的定理 4,从第一个同余式子可以得到 ,其中 是整数。将其代入第二个同余式子中得到 模数很小,从 开始尝试,进而得到 。再次使用 4.1 解的定理 4,,其中 是整数。所以 。代入第三个同余式子中 同样使用尝试法,得到 ,可以令 ,其中 是整数,代入 ,因此
Computer Arithmetic with Large Integers
假定 是两两互斥的正整数, 是它们的乘积。中国剩余定理告诉我们,任意一个整数 ,也就是剩余定理的 ,能够唯一的分解成 元组 这个元组即剩余定理的
如果对非常大的整数做计算,可以先选取一些大于 2 的两两互斥的整数 ,同时要求 比最终要的结果大。
一旦选取了这些质数,要计算的非常大的整数模 ,就得到一个 元组,每一个称为一个分量,分别计算结果,然后从最终的 元组恢复得到想要的结果。这样做的好处是 1)可以处理一些计算机本来无法处理的大的整数;2)各个分量可以并行计算,提高速度。
例 假定一个计算机计算 100 以内的数比较快。我们选择一组两两互斥的模数 ,那么最大可以处理 的数。
现在使用上述方法求 123684 和 413456 的和,这两个数分别可以表示成四元组 ,所以 从 恢复对应的整数即可,相当于求解
使用回代法计算 。令 ,代入第二个同余式子 因为 ,所以 令 ,代入 得到 ,代入第三个同余式子 因为 ,所以 令 ,代入 得到 ,代入第四个同余式子 所以 ,那么 。
整个计算过程中,只有最后恢复整数的时候,涉及了大整数运算。
实践上我们会使用形如 的整数集合,因为 1)计算机计算模更容易;2)更容易寻找互质集合。TODO he second reason is a consequence of the fact that gcd(2a − 1, 2b − 1) = 2gcd(a, b) − 1, as Exercise 37 in Section 4.3 shows.
比如计算机可以计算 内下的数,根据 TODO Exercise 38 in Section 4.3 shows, 是两两互斥的数,那么我们可以容易地计算 这么大的数。
Fermat's Little Theorem
定理 3 费马小定理(FERMAT'S LITTLE THEOREM
)
如果 是质数,且 不能被 整除,那么
进而对于任意整数都有
证明:TODO outlined in Exercise 19
例 求 。
解:根据费马小定理,,而 ,所以
上面的例子展示了如何利用费马小定理求 ,其中 是质数且 。分解 得到 ,那么 。
Pseudoprimes
中国古代的数学家认为 是质数等价于
根据费马小定理,如果 是大于 2 的质数,上式是成立的。不过,存在一些合数,也满足上述式子。这些合数称为基为 2 的伪素数(pseudoprime
)。当研究伪素数的时候,会使用非 2 的整数作为基数。
例 是合数,但是其满足
证明:由于 而根据费马小定理 所以 由 得到 所以我们可以将 写作 其中 均为整数。进而有 是整数,所以 但是由于 11 不能整数 31,所以 那么 ,代入前面的式子 这完全是习题 29 的一个特化形式()。
定义 1 令 是正整数。如果 是合数且满足 ,称 是基底为 的伪素数。
给定一个数 ,如果有 ,那么 是质数或者基底为 2 的伪素数。如果不满足,那么一定是合数。测试更多的 ,那么是质数的概率会增加,不过结论不变是质数或者是伪素数。对于不超过 的数,选定一个 进行判定,只有很少的伪素数。比如 以内有 个质数,但是仅有 个基底为 2 的伪素数。不幸的是,我们无法通过增加任意多的测试来确定其是质数还是伪素数。
定义 2
一个合数 对任意 的 都有 ,那么其成为卡迈克尔数(Carmichael number
)。
例 561 是卡迈克尔数数。首先, 是一个合数。如果 ,那么 。
根据费马小定理,有
那么
根据习题 29,有 。
$$\tag*{}$$
尽管存在无限多的卡迈克尔数,它们可以通过一些列设计巧妙的测试。不过这种测试方式可以很快测试出合数。也就是说,给定一个合数,通过测试的概率趋于零。第七章会讨论这个问题。
Primitive Roots and Discrete Logarithms
定义 3 模 的原根 使得 中的每一个数都是 的幂次。
例 判定 2 和 3 是否是模 11 的原根。
解:首先计算 2 的幂次模 11。, 中的每一个非零数都是 2 的幂次,所以 2 是原根。
接着判定 3。,循环起来了。 中有非零数不是 3 的幂次,所以 3 不是原根。
$$\tag*{}$$
对任意一个质数 都存在模 的原根。TODO Ro10 中有证明。
定义 4
假设 是质数, 是模 的原根, 是属于 的整数。如果 ,其中 ,那么 是基底为 的模 的 的离散对数(discrete logarithm
),写作 。
例 求基底为 2 的模 11 的 3 和 5 的离散对数。
解:根据上个例子 ,所以
$$\tag*{}$$
求解离散对数问题无法在多项式时间复杂度完成,而这在密码学中扮演了重要角色。