输入两个正整数m和n,求其最大公约数和最小公倍数

时间:2022-05-11 12:46:12

题目:输入两个正整数mn,求其最大公约数和最小公倍数。

程序分析:利用辗除法。

在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最小公约数,最小公倍数为两数之积除以最小公倍数。

 1 package com.li.FiftyAlgorthm;
2
3 import java.util.Scanner;
4
5 /**b
6 * 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。
7 * 在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回
8 * 较大的数,此数即为最小公约数,最小公倍数为两数之积除以最小公倍数。
9 *
10 * @author yejin
11 *
12 */
13 public class CommonDiviser {
14 public static void main(String[] args) {
15 int a, b;
16 Scanner s1 = new Scanner(System.in);
17 Scanner s2 = new Scanner(System.in);
18 a = s1.nextInt();
19 b = s2.nextInt();
20 CommonDiviser cd = new CommonDiviser();
21 int m = cd.division(a, b);
22 int n = a * b / m;
23 System.out.println("最大公约数: " + m);
24 System.out.println("最小公倍数: " + n);
25 }
26
27 public int division(int x, int y) {
28 int t;
29 if (x < y) {
30 t = x;
31 x = y;
32 y = t;
33 }
34
35 while (y != 0) {
36 if (x == y)
37 return 1;
38 else {
39 int k = x % y;
40 x = y;
41 y = k;
42 }
43 }
44 return x;
45 }
46 }