Extended Euclid - 扩展欧几里得算法


问题

求两个整数,满足不定方程:

其中是正整数,的最大公约数。

解法

扩展欧几里得算法来源于最大公约数的特性,即对于正整数的最大公约数,必然存在整数满足本题的等式。

根据上一节Euclid中的迭代式:

存在相应的整数满足:

变换等式得到:

注意到两正整数的取模运算满足:

其中表示向下取整,小于等于的最大整数。

可以推导出:

将上面等式按照参数等式变换,得到:

由于等式两边括号外的参数完全相同,可得:

递归的最后一步时有。这时有一组解:

在辗转相除发计算最大公约数时,每一步中都可以顺带着计算出这一步的,最后得到一组解。该算法的时间复杂度约为


Exgcd


源码

ExtendedEuclid.h

ExtendedEuclid.cpp

测试

ExtendedEuclidTest.cpp