Lowest Common Multiple Plus
Problem Description
求n个数的最小公倍数。
Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
Sample Input
2 4 6 3 2 5 7
Sample Output
12 70
这道题,有比较笨拙的办法,就是取出这些数的最大值跟这些数进行取余,若不不为零,就把最大值加一,然后再来比较。但是这种方法太慢。
我设置了一个变量作为最大值的倍数,然后每次对最大值取倍数再做判断,速度即可提升。
代码实现:
<span style="font-family:Times New Roman;font-size:14px;">import java.util.Scanner;
public class Main {
//求n个数的最小公倍数。
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int a[]=new int[n];
//每个测试实例的开始是一个正整数n,然后是n个正整数。
int max=0;
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
if(max<a[i]){
max=a[i];
}
}
/*
a:while(true){
for(int i=0;i<n;i++){
//如果最大值跟数组的每个数取余不为零,max就加一,再从新判断.这种方法比较笨拙,但是容易理解
if(max%a[i]!=0){
max+=1;
break;
}
if(i==n-1){
break a;
}
}
}*/
int j=1;//用来做max的倍数,如果max不是他们的最小公倍数,那么再把max取2倍再进行比较,直到取出正确结果
a:while(true){
for(int i=0;i<n;i++){
if((max*j)%a[i]!=0){
j++;
break;
}
if(i==n-1){
break a;
}
}
}
System.out.println(max*j);
}
}
}
</span>