C语言编程 最小众倍数,最小众倍数

方法一:暴力搜索。复杂度等于搜索下限减去上限: 搜索下限:第3大的数。

搜索上限:前3小的数的乘积。

方法二:寻找所有三个数的组合的最小众倍数,取其中最小的那个。复杂度等于O(n^3),n为输入数的个数,本题 n = 5。

如何求3个数a,b,c的最小众倍数? 求出b*c,a*c的最大公约数A;

求出a*c,a*b的最大公约数B;

求出A,B的最大公约数C;

使用(a*b*c) / C即得到结果。

代码如下: import java.util.Scanner;

public class Main {

public static void main(String[] args) {

int[] nums = new int[5];

Scanner sc = new Scanner(System.in);

for (int i = 0; i < 5; i++) {

nums[i] = sc.nextInt();

}

System.out.println(zbs(nums));

}

public static int zbs(int[] seq) {

int min = Integer.MAX_VALUE;

for (int i = 0; i < seq.length; i++) {

for (int j = i+1; j < seq.length; j++) {

for (int k = j+1; k < seq.length; k++) {

min = Math.min(min, findZBS(seq[i], seq[j], seq[k]));

}

}

}

return min;

}

public static int findZBS(int a, int b, int c) {

return (a*b*c) / GCD(GCD(b*c, a*c), GCD(a*c, a*b));

}

public static int GCD(int a, int b) {

int c;

while ( b != 0 ) {

c = a % b;

a = b;

b = c;

}

return a;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值