题目描述
求n个整数的最小公倍数
输入
多组测试数据,先输入整数T表示组数 然后每行先输入1个整数n,后面输入n个整数k1 k2...kn
输出
求k1 k2 ...kn的最小公倍数
样例输入 Copy
1 3 12 18 6
样例输出 Copy
36
#include <stdio.h>
int gcd(int a, int b) {
while (b != 0) {
int temp = a % b;
a = b;
b = temp;
}
return a;
}
int lcm(int a, int b) {
return a / gcd(a, b) * b;
}
int n_lcm(int arr[], int n) {
int result = arr[0];
for (int i = 1; i < n; ++i) {
result = lcm(result, arr[i]);
}
return result;
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; ++i) {
scanf("%d", &arr[i]);
}
printf("%d\n", n_lcm(arr, n));
}
return 0;
}
解析:
在这个问题中,我们可以利用最小公倍数(LCM)的性质来简化计算:
- 两个数的最小公倍数等于两个数的乘积除以它们的最大公约数(GCD)。
- 三个及以上数的最小公倍数等于其中两个数的最小公倍数与剩余数的最小公倍数的最小公倍数。
因此,我们只需编写一个函数来计算两个数的最大公约数,然后使用这个函数来计算 n 个数的最小公倍数。