HDU1019 Least Common Multiple (最小公倍数)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=1019
题意
给定n个数,求这些数的最小公倍数
思路
先将给定的数按从小到大进行排序,然后设置一个索引index,表示求前第几个数的最小公倍数,设置两个变量now和multiple,now存前index个数的公倍数,multiple存前index个数的最小公倍数。
如果now能够被第index个数整除,则代表now是前index个数的最小公倍数,将改值赋给multiple;如果不能被整除,则将now+multiple直到可以被整除为止。
因为multiple已经可以被前index个数整除,所以now+multiple必定可以被前index个数整除。
AC代码
#include <bits/stdc++.h>
using namespace std;
/**
* Created with IntelliJ Clion.
* @author wanyu
* @Date: 2018-02-27
* @Time: 15:53
* To change this template use File | Settings | File Templates.
*
*/
int main() {
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
int nums[n];
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
sort(nums, nums + n);
int multiple = nums[0];//前index个数的最小公倍数
int now = nums[0];//前index个数的公倍数
int index = 1;//索引
while (index < n) {
if (now % nums[index] == 0) {
//是倍数
multiple = now;
index++;
} else {
//不是倍数
now += multiple;
}
}
printf("%d\n", multiple);
}
return 0;
}