下面是从网上整合的资料:
辗转相除法,即欧几里德算法。
方法:
大数/小数(即两个数中较小的数):如果能整除,则最大公约数=小数;如果不能整除,则 除数/余数,循环直至整除,最大公约数=除数。
例子:求511和292的最大公约数?
解:511/292=1余219,292/219=1余73,219/73=3,则最大公约数为73。
基本原理:
问题:如果要求两个正整数a和b(假设a>b,其实这并不影响求解算法)的最大公约数。
表示a=b×q+r 其中,q表示a除以b所得的商,r表示余数。
则gcd(a,b)=gcd(b,r)。 (最大公约数greatest common divisor,gcd)
可以看出,如果一个数能够同时整除a和b,则必能同时整除b和r;而能够同时整除b和r的数也必能同时整除a和b。即a和b的公约数与b和r的公约数是相同的,其最大公约数也是相同的。
定义:
对於两个自然数 a 和 b,若存在正整数 q,使得 a=bq,则 b 能整除 a,记作 b | a,我们叫 b 是 a 的因数,而 a 是 b 的倍数. 那么如果 c | a,而且 c | b,则 c 是 a 和 b 的公因数.由此,我们可以得出以下一些推论:
推论一:如果 a | b,若 k 是整数,则 a | kb.因为由 a | b 可知 ha=b,所以 (hk)a=kb,即 a | kb.
推论二:如果 a | b