首页 > 试题广场 >

最小众倍数

[编程题]最小众倍数
  • 热度指数:4170 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定5个正整数, 它们的最小的众倍数是指的能够被其中至少三个数整除的最小正整数。 给定5个不同的正整数, 请计算输出它们的最小众倍数。

输入描述:
输入包括一行,一行中有五个各不相同的正整数a, b, c, d, e(1 ≤ a, b, c, d, e ≤ 100), 以空格分割


输出描述:
输出一个整数,表示它们的最小众倍数
示例1

输入

1 2 3 4 5

输出

4
import java.util.*;
public class Main {
    public static int Min_divisor(int m,int n){
        int r=m%n;
        while(r>0){
            m=n;
            n=r;
            r=m%n;
        }
        return n;
    }
    public static void main(String args[]){
        Scanner scanner=new Scanner(System.in);
        int[] pt=new int[5];
        for(int i=0;i<5;i++){
            pt[i]=scanner.nextInt();
        }
        Arrays.sort(pt);
        int Min=Integer.MAX_VALUE;
        int m1,m2;
        for(int i=0;i<3;i++){
            for(int j=i+1;j<4;j++){
                for(int k=j+1;k<5;k++){
                    m1=pt[i]/Min_divisor(pt[i],pt[j])*pt[j];
                    m2=m1/Min_divisor(m1,pt[k])*pt[k];
                    Min=Math.min(Min,m2);
                }
            }
        }
        System.out.println(Min);
    }
}

发表于 2019-11-09 20:17:46 回复(0)
最小公倍数是两个数的乘积除以两者的最大公约数;
三个数的最小公倍数是前两个数的最小公倍数和第三个数的最小公倍数;
5个数取3个一共10种组合;
运用以上三点就可以解答该题了。
import java.util.Arrays;
import java.util.Scanner;
import java.util.Arrays;
import java.util.Scanner;

public class MinMultiple {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] str = sc.nextLine().split(" ");
        int[] num = new int[str.length];
        for (int i = 0; i < str.length; i++) {
            num[i] = Integer.parseInt(str[i]);
        }
        Arrays.sort(num);

        int mutiple = Integer.MAX_VALUE;
        for (int i = 0; i < 3; i++) {
            for (int j = i+1; j < 4; j++) {
                for (int k = j+1; k < 5; k++) {
                    int n2 = num[j] * num[i] / getMaxCommon(num[j], num[i]);
                    int n3 = n2 * num[k] / getMaxCommon(n2, num[k]);
                    mutiple = Math.min(n3, mutiple);
                }
            }
        }
        System.out.println(mutiple);
    }

    public static int getMaxCommon(int m, int n) {
        if (m % n == 0) {
            return n;
        } else {
            return getMaxCommon(n, m % n);
        }
    }

}


编辑于 2019-07-08 20:20:59 回复(0)