最大公约数问题(greatest common divisor):
指某几个整数共有因子中最大的一个。
运用欧几里得的辗转相除法。
假设用f(x, y)表示x,y的最大公约数,取k = x/y,b = x%y,则x = ky + b,如果一个数能够同时整除x和y,则必能同时整除b和y;而能够同时整除b和y的数也必能同时整除x和y,即x和y的公约数与b和y的公约数是相同的,其最大公约数也是相同的,则有f(x, y)= f(y, x%y)(y > 0),如此便可把原问题转化为求两个更小数的最大公约数,直到其中一个数为0,剩下的另外一个数就是两者最大的公约数。
public class GreatestCommonDivisor
{
public static int gcd(int a,int b)
//方法1通过递归调用gcd方法,直到b为零返回a的值。
{
if(b==0)
return a;
if(a<0)
return gcd(-a,b);
if(b<0)
return gcd(a,-b);
return gcd(b,a%b);
}
public static int gcd2(int a,int b)//
{
//通过while循环,得到a,b两数的最大公约数。
while (b!=0)
{
int temp = a%b;
a = b;
b = temp;
}
return a;
}
public static void main(String[] args)
{
int a = 12;
int b = 50;
int c = 60;
System.out.println(gcd(gcd2(a,b),c));
}
}