您的位置:首页 > 其它

hdu/hdoj 1019 Least Common Multiple

2013-08-27 12:40 453 查看
题意就是求一个数列的最小公倍数,使用欧几里德算法

递归代码

#include <iostream>
#include <cmath>
using namespace std;

__int64 data[1024];

//欧几里德算法求两个数的最大公约数
__int64 gcd(__int64 a, __int64 b)
{

if (b == 0)
{
return a;
}
else
{
return gcd(b, a % b);
}
}

__int64 lcm(__int64 a, __int64 b)
{
return a / gcd(a, b) * b; //先除法在乘法可以防止溢出
}

__int64 nlcm(__int64 * a, int n)
{
if (n == 1)
{
return *a;
}
else
{
return lcm(a[n - 1], nlcm(a, n - 1));//递归
}
}

int main()
{

int T;

cin >> T;
while (T--)
{
int num;
cin >> num;
for (int i = 0; i < num; i++)
{
scanf("%I64d", &data[i]);
}
printf("%I64d\n", nlcm(data, num));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu 1019 数论