点这里 |
---|
题意: 求多个数的最小公倍数
题解: 没什么好说的,数不会太多,挨个求相邻两个数的最小公倍数,得到的这个数与下一个数继续求最小公倍数,直到最后一个数结束。最小公倍数 = x * y / x、y的最小公约数。
过程中犯的错:
- 最小公倍数 = x * y / x、y的最小公约数。 数学上这个是没错,但是如果定义的是
int
, 那么在前两个数相乘的时候,就有可能会超出int的范围。
#include<bits/stdc++.h>
using namespace std;
int T, n, pre, now;
int gcd(int a, int b){ if(!b) return a; return gcd(b, a % b);}
int main(){
scanf("%d", &T);
while(T--){
pre = 1;
scanf("%d", &n);
while(n--){
scanf("%d", &now);
pre = pre / gcd(pre, now) * now;// 要么就改longlong,要么就先除再乘
}
printf("%d\n", pre);
}
return 0;
}