Least Common Multiple
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 56425 Accepted Submission(s): 21492
Problem Description
The least common multiple (LCM) of a set of positive integers is the smallest positive integer which is divisible by all the numbers in the set. For example, the LCM of 5, 7 and 15 is 105.
Input
Input will consist of multiple problem instances. The first line of the input will contain a single integer indicating the number of problem instances. Each instance will consist of a single line of the form m n1 n2 n3 ... nm where
m is the number of integers in the set and n1 ... nm are the integers. All integers will be positive and lie within the range of a 32-bit integer.
Output
For each problem instance, output a single line containing the corresponding LCM. All results will lie in the range of a 32-bit integer.
Sample Input
2 3 5 7 15 6 4 10296 936 1287 792 1
Sample Output
105 10296
求一组数的最小公倍数,就相当于求前面的两个的最小公倍数lcm,然后再拿第三个数来和lcm 求最小公倍数.......
最后求到的就是一组数的最小公倍数。
怎么求两个数的最小公倍数呢?
可以先得到两个数的最大一方,拿他的倍数(1,2,3.....)去与小的值取余,除得尽就是得到最小公倍数了。
下面AC代码:
import java.util.Scanner;
public class Main{
private static Scanner scanner;
public static void main(String[] args) {
scanner = new Scanner(System.in);
int cases = scanner.nextInt();
while (cases-- > 0) {
int n = scanner.nextInt();
int arr[] = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
}
int lcm = 1;
for (int j = 0; j < arr.length; j++) {
lcm = findlcm(lcm, arr[j]);
}
System.out.println(lcm);
}
}
private static int findlcm(int lcm, int i) {
if (lcm < i) {
int t = lcm;
lcm = i;
i = t;
}
int n = 1;
while (lcm * n % i != 0) {
n++;
}
return lcm*n;
}
}