题目:输入两个正整数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);
- }
- }
复制代码 |