言:
求最大公约数的算法有很多,有更相减损法,辗转相除法等,但是较易用算法实现的,且效率相对较高的就是辗转相除法了。以下介绍用Java实现辗转相除法,记录学习通时也当作分享。
原理:
两个数的最大公约数是指能同时整除它们的最大正整数。
设两数为a、b(a≥b),求a和b最大公约数
的步骤如下:
(1)用a除以b(a≥b),得
。
(2)若
,则
;
(3)若
,则再用b除以
,得
.
(4)若
,则
;若
,则继续用
除以
,......,如此下去,直到能整除为止。
其最后一个余数为0的除数即为
的最大公约数。
例:用辗转相除法求(80,25)的最大公约数
80÷25=3......5
25÷5=5......0//余数为零,最大公约数为等式中的除数5
证明:
第一步:令
,则设
第二步:根据前提可知
第三步:根据第二步结果可知,
也是
的因数
第四步:可以断定
与
互质(这里用
反证法进行证明:设
,则
,则
,则a与b的一个公约数
,故c非a与b的最大公约数,与前面结论矛盾,则它们互质。又因
b=nc,r=(m-kn)c,
因此c也是b与r的最大公约数)从而可知
,继而
。
Java算法实现:
算法实现:
public class zhanzhuan {
int a; //定义被除数
int b; //定义除数
int f(int a,int b) {
this.a=a;
this.b=b;
int c;
if(a<b) { //将a设为较大数
c=a;
a=b;
b=c;
}
int r=a%b;
while(r!=0) { //辗转相除
a=b;
b=r;
r=a%b;
}
return b; //b为最大公约数
}
}
调用:
class test{ //调用部分
public static void main(String[] args) {
zhanzhuan z = new zhanzhuan();
z.a=98;
z.b=26;
System.out.println(z.a+"和"+z.b+"两数的最大公约数是:"+z.f(z.a, z.b));
}
}
结果: