最大公约数问题

来源:互联网 发布:plc控制编程 编辑:程序博客网 时间:2024/06/05 09:21

问题与解法均出自编程之美

求两数A和B的最大公约数

辗转相除法因为有模运算,所以摒弃不用

分析a和b

若a和b均为偶数,则a和b的最大公约数f(a,b)=2*f(a>>1,b>>1)

若a和b为一奇一偶,设a为偶,则a和b的最大公钥数f(a,b)=f(a>>1,b)

若a和b均为奇数,则f(a,b)=f(b,a-b)

这样不断减小a和b,最终得到结果

这种方法的优点在于没有取模运算,只有位运算和减法,在a或b比较大的时候有计算优势

0 0