欧几里得算法是数论中的一个最基本的技巧,作用是可以简单求出两个正整数的最大公因子。
首先,有一个简单的定义:如果两个整数是互素的,则当且仅当他们只有一个正整数公因子1。
一般用gcd(a,b)表示a和b的最大公因子。如上则若a,b互素,即gcd(a,b)=1
则欧几里得算法提供过了一种简单的算法可以求出两个整数最大公因子,在密码学中意义广泛。
简单地说,欧几里得算法就是重复使用带余除法不断迭代来求出两个整数的最大公因子。
直接看例子:
求d = gcd(a,b) = gcd(1160718174,316258250)
1160718174 = 316258250 × 3 + 211943424 | 转换为求d = gcd(316258250,211943424) |
---|---|
316258250 = 211943424 × 2 + 104314826 | 转换为求d = gcd(211943424,104314826) |
211943424 = 104314826 × 2 + 3313772 | 转换为求d = gcd(104314826,3313772) |
以此类推 | … |
67914 = 2156 × 31 + 1078 | 转换为求d = gcd(2156,1078) |
2156 = 1078 × 2 + 0 | 得出d = gcd(1078,0)=1078 |
可以看出,每次迭代都是把上一轮的除数和余数作为新的被除数和除数来计算。
发现余数为0则停止迭代,最终的结果1078就是题目d = gcd(a,b) = gcd(1160718174,316258250)的结果。