#include <iostream>
#include <cstdio>
#include <vector>
#include <map>
#include <cmath>
#include <algorithm>
using namespace std;
map<int, int> prime_cnt, tmp_cnt; // 用于存放质因子以及其对应的最大次数
void computePrimeFactorCount(int num)
{
// printf("%d进入computePrimeFactorCount函数!\n", num);
for (int i = 2; num != 1;)
{
if (num % i == 0)
{
tmp_cnt[i]++;
num /= i;
}
else
{
i++;
}
}
// 更新参数
map<int, int>::iterator iter = tmp_cnt.begin();
while (iter != tmp_cnt.end())
{
prime_cnt[iter->first] = max(prime_cnt[iter->first], iter->second);
iter++;
}
tmp_cnt.clear(); // 每次统计完成后都将辅助统计次数的map清空,方便进行下一轮的统计
}
int main(int argc, char const *argv[])
{
std::ios::sync_with_stdio(false);
// 输入数据
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int num;
cin >> num;
computePrimeFactorCount(num);
}
map<int, int>::iterator iter = prime_cnt.begin();
int ans = 1; // 注意初始值为1,不是0
while (iter != prime_cnt.end())
{
// printf("%d-->%d\n", iter->first, iter->second);
ans *= pow(iter->first, iter->second);
iter++;
}
cout << ans << endl;
return 0;
}
/*
实例:
4
2 3 5 6 30
5
2 3 5 6 8 120
5
3 5 15 7 2 210
7
2 3 4 5 6 7 15 420
*/
最小公倍数
于 2021-03-28 21:03:20 首次发布