黑马程序员技术交流社区
标题:
【基础算法】最大公约数和最小公倍数,用到递归和循环
[打印本页]
作者:
刘伟平
时间:
2012-10-18 12:15
标题:
【基础算法】最大公约数和最小公倍数,用到递归和循环
题目:输入两个正整数m 和n,求其最大公约数和最小公倍数。
程序分析:利用辗除法。
设两数为a、b(b<a),求它们最大公约数(a、b)的步骤如下:
用b除a,得a=bq......r 1(0≤r)。
若r1=0,则(a,b)=b;若r1≠0,则再用r1除b,得b=r1q......r2 (0≤r2).
若r2=0,则(a,b)=r1,若r2≠0,则继续用r2除r1,……
如此下去,直到能整除为止。其最后一个非零余数即为(a,b)。
另外,最小公倍数等于两数之积除以最大公约数。
class Test06
{
public static void main(String[] args)
{
System.out.println(getLCM(30,20));
}
//求最大公约数
public static int getGCD(int a,int b)
{
//需确定两数的大小
int great=a,low=b;
if (a<b)
{
great = b;
low = a;
//System.out.println("great="+great+" ; low="+low);
}
//求余数
int r= -1;
while(r!=0)
{
r= great%low;
great = low;
low=r;
//System.out.println("great="+great+" ; low="+low+" ; r="+r);
}
return great;
}
public static int getGCD2(int a,int b)
{
//用递归计算最大公约数
int great=a,low=b;
if (a<b)
{
great = b;
low = a;
System.out.println("great="+great+" ; low="+low);
}
if (low != 0)
{
return getGCD2(low,great%low);//递归时return的应该是递归方法的返回值,而不是其中的变量
}
else
{
return great;
}
}
//求最小公倍数。最小公倍数等于两数之积除以最大公约数。
public static int getLCM(int a,int b)
{
return a*b/getGCD(a,b);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2