1.优美的最大公约数的算法
int gcd(int a, int b) {
return b?gcd(b, a%b):a;
}
2.溢出问题
两个数是a,b最大公约数是p,最小公倍数是q
那么有这样的关系:ab=pq
所以q=ab/p,于是很多同学 a * b / p,这里a * b可能会溢出。只要改一下运算顺序就对了, a / p * b;
3.依次处理类的问题没必要开数组,第一次多读取一个值,然后依次往后处理即可
scanf("%d %d", &n, &temp);
for (int i = 1; i < n; ++i) {
scanf("%d", &x);
temp = temp / gcd(temp, x) * x;
}
代码如下
#include<stdio.h>
int gcd(int a, int b) {
return b?gcd(b, a%b):a;
}
int main(void)
{
int T, n, x, temp;
scanf("%d", &T);
while (T--) {
scanf("%d %d", &n, &temp);
for (int i = 1; i < n; ++i) {
scanf("%d", &x);
temp = temp / gcd(temp, x) * x;
}
printf("%d\n", temp);
}
return 0;
}