【题意】:求多个数的最小公倍数。
【思路】:求最小公倍数可以先求最大公约数。求最大公约数两种方法:短除法和辗转相处法。两者之间的关系:两个数为ab,最大公约数为p,最小公倍数为q,则ab=pq!
【AC代码】:短除法。注意:先除后乘,否则溢出。这种题目一定要注意中间过程是否溢出。
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iomanip>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int gcd(int a, int b)
{
while (a!=b)
{
if (a > b)
a = a-b;
else
b = b-a;
}
return a;
}
int main(int argc, char** argv) {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int T = 0;
cin >> T;
while (T--)
{
int n = 0;
int LCM = 0;
cin >> n;
cin >> LCM;
while (--n)
{
int a = 0;
cin >> a;
LCM = a/gcd(a, LCM)*LCM;
}
cout << LCM << endl;
}
return 0;
}
【AC代码】:辗转相处法。
int gcd(int a, int b)
{
if (a<b)
{
int temp = 0;
temp = a;
a = b;
b = temp;
}
while (a%b)
{
int temp = 0;
temp = a%b;
a = b;
b = temp;
}
return b;
}