java题目 HJ108 求最小公倍数

描述

正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
 
数据范围:1 \le a,b \le 100000 \1a,b100000 

输入描述:

输入两个正整数A和B。

输出描述:

输出A和B的最小公倍数。

示例1

输入:
5 7
输出:
35

示例2

输入:
2 4
输出:
4

 

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            
            int max = Math.max(a, b);
            int tmp = max;
            int n = Math.min(a, b);
            for(int i =1; i<=n; i++) {
                if(tmp % a ==0 && tmp % b ==0) {
                    break;
                } else {
                    tmp = max * i;
                }
            }
            System.out.println(tmp);
        }
    }
}

 

 

方法二

计算a = 1071和b = 462的最大公约数的过程如下:从1071中不断减去462直到小于462(可以减2次,即商q0 = 2),余数是147:

1071 = 2 × 462 + 147.

然后从462中不断减去147直到小于147(可以减3次,即q1 = 3),余数是21:

462 = 3 × 147 + 21.

再从147中不断减去21直到小于21(可以减7次,即q2 = 7),没有余数:

147 = 7 × 21 + 0.

此时,余数是0,所以1071和462的最大公约数是21。

 1 import java.io.*;
 2 import java.util.*;
 3 
 4 
 5 /*
 6 最小公倍数= axb/gcd(a,b)
 7 */
 8 public class Main{
 9     public static void main(String[] args) throws IOException {
10         Scanner sc = new Scanner(System.in);
11         while(sc.hasNextInt()) {
12             int a = sc.nextInt();
13             int b = sc.nextInt();
14             int c = a*b / gcd(a, b);
15             System.out.println(c);
16         }
17     }
18     public static int gcd(int a, int b) {
19         if(b == 0)
20             return a;
21         else
22             return gcd(b, a%b);
23     }
24 }

 

posted @ 2022-03-06 21:46  海漠  阅读(180)  评论(0)    收藏  举报