在c语言的学习中必然会遇到求两个数之间的最大公约数的题目,那么对于其他经典方法,最简便快捷的方式就是利用辗转相除法
辗转相除法又叫做欧几里得算法,目的是为了求两个正整数的最大公约数
定理:gcd(a,b) = gcd(b ,a%b) //在这里用(a,b)表示a和b的最大公约数
证明:a可以表示成a = kb + r,则r = a % b
假设d是a,b的一个公约数,则有
d|a, d|b,而r = a - kb,因此d|r //这里的"|"的意思是 :d是b的因数 ,d是a的因数
因此d是(b,a%b)的公约数
假设d 是(b,a%b)的公约数,则
d | b , d |r ,但是a = kb +r //同上意思
因此d也是(a,b)的公约数
因此(a,b)和(b,a%b)的公约数是一样的,其最大公约数也必然相等,得证
或许看不太懂,那么举个例子看看?
求 (495,319)=
解 495➗319=1......176
319➗176=1.......143
176➗143=1........33
143➗33=4.........11
33➗11=3..........0
即可得出 (495