基础数学 - 初等数论 - 最大公约数
Problem Description
求n个数的最小公倍数。
Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数
Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
Sample Input
2 4 6
3 2 5 7
Sample Output
12
70
最大公约数 —— Greatest Common Divisor(GCD)
最小公倍数 —— Leatest Common Multiple(LCM)
最大公约数:就是两个数共同的约数中最大的数
最小公倍数:这是两个数第一次有倍数相等关系的那个数
公式:a∗b=GCD∗LCM
求最大公约数:
①辗转相除法:
②更相减损术:
求最小公倍数:
①公式法
GCD=a∗b/LCM
#include <iostream>
using namespace std;
#include <vector>
int gcd(int a,int b)
{
while (1)
{
int c = a % b;
if (c == 0)
return b;
a = b;
b = c;
}
}
int lcm(int a,int b)
{
return a * b / gcd(a, b);
}
int main()
{
int n;
while (cin >> n)
{
vector<int> v;
for (int i = 0; i < n; i++)
{
int x;
cin >> x;
v.push_back(x);
}
int res;
for (int i = 0; i < n-1; i++)
{
res = lcm(v[i], v[i + 1]);
v[i + 1] = res;
}
cout << res << endl;
}
return 0;
}