欧几里得算法及其拓展

待完善,困得不行了

1.欧几里德算法

欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a, b) = gcd(b, a mod b);

拓展的欧几里得算法可用于RSA加密等领域。

欧几里德算法的步骤如下,假设我们要求762和230两个正整数的最大公约数,则有如下过程:

  • 762 / 230 = 3 余 72
  • 230 / 72 = 3 余 14
  • 72 / 14 = 5 余4
  • 14 / 4 = 3 余2
  • 4 / 2 = 2 余0

以除数和余数反复做除法运算,当余数为0时,当前算式的除数即为所求最大公约数,故762 和 230 的最大公约数为2,其python代码实现为:

def gcd(a, b):
    while a % b != 0:
        a, b = b, a % b
    return b

但考虑到计算机进行除法运算难度较大,编程求最大公约数更优的方法应当是使用加减法这些计算机更容易实现的操作来实现,如下:

def gcd(a, b):
    while a > 

2.拓展的欧几里德算法

扩展欧几里得算法(英语:ExtendedEuclideanalgorithm)是欧几里得算法(又叫辗转相除法)的扩展。已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足贝祖等式:

ax + by = gcd(a, b)

如果a是负数,可以把问题转化成

|a|(-x) + by = gcd(|a|, b)

然后令x'=(-x)。

有两个数a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到ax+by=gcd(a,b)的整数解。
扩展欧几里得算法可以用来计算模反元素(也叫模逆元),而模反元素在RSA加密算法中有举足轻重的地位。

猜你喜欢

转载自www.cnblogs.com/chuaner/p/11536491.html