辗转相除法(又名欧几里德法)

前提:设两数为a,b设其中a 做被除数,b做除数,temp为余数
1、大数放a中、小数放b中;
2、求a/b的余数;
3、若temp=0则b为最大公约数;
4、如果temp!=0则把b的值给a、temp的值给a;
5、返回第二步;

更相减损法

第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。

第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。

则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。

Stein算法

*整理一下,对两个正整数 x>y :
1.均为偶数 gcd( x,y ) =2gcd( x/2,y/2 );
2.均为奇数 gcd( x,y ) = gcd( (x+y)/2,(x-y)/2 );
2.x奇y偶 gcd( x,y ) = gcd( x,y/2 );
3.x偶y奇 gcd( x,y ) = gcd( x/2,y ) 或 gcd( x,y )=gcd( y,x/2 );
现在已经有了递归式,还需要再找出一个退化情况。注意到 gcd( x,x ) = x ,就用这个。

 


奇数和偶数,有下面的性质:
(1)奇数不会同时是偶数;两个连续整数中必是一个奇数一个偶数;
(2)奇数个奇数和是奇数;偶数个奇数的和是偶数;任意多个偶数的和是偶数;
(3)两个奇(偶)数的差是偶数;一个偶数与一个奇数的差是奇数;
(4)若a、b为整数,则a+b与a-b有相同的奇偶性;
(5)n个奇数的乘积是奇数,n个偶数的乘积是2n的倍数;算式中有一个是偶数,则乘积是偶数.
(6)除2外所有的正偶数均为合数.
(7)相邻偶数最大公约数为2.

合数:是除了1和它本身还能被其他的正整数整除的正整数。除2之外的偶数都是合数。(除0以外)

质数(又称为素数):就是在所有比1大的整数中,除了1和它本身以外,不再有别的约数,这种整数叫做质数或素数。还可以说成质数只有1和它本身两个约数。

任何一个正整数可以分解为若干个质数的乘积


在解有关最大公约数、最小公倍数的问题时,常用到以下结论:

(1)如果两个自然数是互质数,那么它们的最大公约数是1,最小公倍数是这两个数的乘积。
  例如8和9,它们是互质数,所以(8,9)=1,[8,9]=72。

(2)如果两个自然数中,较大数是较小数的倍数,那么较小数就是这两个数的最大公约数,较大数就是这两个数的最小公倍数。
  例如18与3,18÷3=6,所以(18,3)=3,[18,3]=18。

(3)两个整数分别除以它们的最大公约数,所得的商是互质数。
  例如8和14分别除以它们的最大公约数2,所得的商分别为4和7,那么4和7是互质数。

(4)两个自然数的最大公约数与它们的最小公倍数的乘积等于这两个数的乘积。
  例如12和16,(12,16)=4,[12,16]=48,有4×48=12×16,即(12,16)× [12,16]=12×16。