求两正整数和的最大公约数()和最小公倍数()。
设表示非负整数的最大公约数,任意正整数和满足:
也可以写作:
若,则第一步实际上会交换两个数字的位置,因为必然有。每一步得到的余数都会越来越小,必然存在一个数字使得,即为的最大公约数。
设为原始的,用迭代式表达:
对于第步递归,有。迭代到第步时得到,即为最大公约数。
欧几里得算法的时间复杂度约为。
Euclid.h
Euclid.cpp
EuclidTest.cpp