java求取最大公约数
概念
在写代码之前我们要了解一些基本概念
- 如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数。
- 几个整数,公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数。
a%b=0 (b>0),a的最大公约数为b,当b=0时,最大公约数为a
算法思路
当b不等于0时,a除以b取余数,a等于b与余数相除,直到余数等于0,结束
while(b!=0)
{
int temp=a%b; //取余
a =b;
b=temp;
}
方法一
public static int gys(int a,int b) {//返回最大公约数
//以8,4为例 8,4
while(b!=0) //b!=0 分母不为0
{
int temp=a%b; //temp=0
a =b; //a=4
b=temp; //b=2
}
//0除以任何数都是0,所以一个数跟0比较,最大公约数是自身。
if(a<0)
return -a; //最大公约数是否是负数不影响,可删
return a; //4
}
方法二,利用递归调用求取最大公约数
public static int gys2(int a,int b) { //递归调用,a,b最大公约数
//以-8,-4为例
if(b==0) //b=0
return a;
if(a<0)
return gys2(-a,b);
if(b<0)
return gys2(a,-b);
return gys2(b,a%b); //a=b=4,b=a%b=0
}