WTF zk教程第10讲:欧拉定理
欧拉定理是数论中的基本定理,表明在模运算中,对于任意整数与模数互质的情况下,该整数的欧拉函数次幂与模数同余于1,为RSA等加密算法提供了数学基础。这一讲,我们将介绍离散对数问题,单元阶,以及欧拉定理。
1. 离散对数问题
离散数学问题(Discrete Logarithm Problem)是数学和密码学中的一个经典难题,其实就是说模运算求对数非常难。
给定素数 ,以及整数 ,要求找到整数 ,使得:
举个例子,对于 ,求满足等式 的 。我们尝试用穷举法来解决它:
因此, 满足条件。
但是对于更大的素数,计算离散对数非常难,比如 就很难。而RSA加密算法和椭圆曲线密码系统的安全性就是由离散对数问题保障的,会选取更大更难计算的参数。
2. 单元阶
设 ,能让 的最小整数 被称为单元 的阶。
举个例子:
当模 , 时,有:
因此 的阶为 。单元的阶很重要,因为它刻画了单元集的循环性质。我们可以看到 ,落入了下一个 循环中。
2.1 阶的性质
在数论中,阶(order)是一个重要的概念,表示一个元素与模数之间的循环性质。以下是数论中阶的一些重要性质:
1. 如果 的阶为 ,那么 当且仅当 整除 。
继续使用上面的例子, , 的阶为 ,有 , 能整除 。
点我展开证明 👀
首先,我们先把 用 表示。根据欧几里得除法,有
其中 。然后将它代入原式,有
又因为 ,所以 ,上式可以简化为
根据阶的定义, 是能让 的最小整数,又因为 ,所以 ,有:
因此 整除 ,证毕。
2. 如果 与模数 互质,那么 的阶 能够整除 ,其中 是欧拉函数。
点我展开证明 👀
这一性质涉及欧拉定理,我们会在下一节介绍。
根据欧拉定理,有 。根据第一个性质:如果 的阶为 ,那么 当且仅当 整除 。有 整除。证毕。
3. 欧拉定理
欧拉定理将欧拉函数和幂运算的循环性质联系起来。
定理: 如果整数 和正整数 互质(即 ),那么 。
其中 是欧拉函数,也就是 中与 互质的整数的个数。
继续使用上面的例子, ,首先计算 ,有 , 符合欧拉定理。
再举个例子, ,首先计算 ,然后应用欧拉定理得到 。检查一下 ,除 的余数为 ,欧拉定理正确。
点我展开证明 👀
考虑集合 。我们知道 共有 个元素,把它们记为 。
再考虑另一个集合 ,它的元素是 中的元素乘以 ,可以表示为:
引理1: 。
证明:因为 且 ,因此 。
引理2: 从集合 任取两个元素,它们不在模 下同余。
证明:假设 中存在两个元素 和 同余,有 ,那么有 ,也就意味着 整除 ,即 。又因为 ,那么 ,也就是 。又因为 ,因此 ,也就是 ,因此当且仅当 时, 才和 同余。证毕。
根据引理1和2,我们知道 由 个与 互质的元素组成,且它们两两不同余。也就是说 ,和 中包含的元素相同(但是顺序可能改变)。
接下来,我们分别将 和 所有元素相乘,它们应该同余,也就是:
把所有的 提出来,一共 个,有:
设 ,有 ,因此原式可以简化成:
因为 存在,我们在两边同时乘以 并简化,可以得到:
证毕!
3.1 与费马小定理的关系
我们可以很轻松的利用欧拉定理证明费马小定理。
根据欧拉定理:如果整数 和正整数 互质(即 ),那么 。
当 为质数时, ,代入原式,有 , 等价于 。这样,我们就证明了费马小定理,它可以被认为是欧拉定理 为质数时的特殊情况。
3.2 代码实现
你可以在python中验证欧拉定理:
def gcd(a, b):
while b:
a, b = b, a % b
return a
def euler_phi(n):
count = 0
for i in range(1, n + 1):
if gcd(n, i) == 1:
count += 1
return count
def euler_theorem(a, n):
if gcd(a, n) != 1:
raise ValueError("a and n must be coprime for Euler's theorem.")
result = pow(a, euler_phi(n), n)
return result
# 示例
n = 15
print(f"欧拉函数 phi({n}): {euler_phi(n)}")
# 欧拉函数 phi(15): 8
a = 7
result = euler_theorem(a, n)
print(f"欧拉定理: {a}^phi({n}) mod {n} = {result}")
# 欧拉定理: 7^phi(15) mod 15 = 1
4. 总结
这一讲,我们介绍了欧拉定理,以及它和费马小定理的关系。欧拉定理是RSA加密算法的数学基础,非常重要,大家要好好掌握。