用来求两个数的最大公约数GCD(Greatest Common Divisor)的算法。具体如下
int gcd(int a,int b){
if(b == 0) return a;
return gcd(b,a%b);
}
两个正整数的最小公倍数LCM(Lease Common Mutiple) = 两个数的乘积 ÷ 两个数的最大公约数
注意在求两个数的乘积 的时候可能因为数据过大而溢出,所以用一个数先除两个数的最大公约数,再乘剩下的那个数。
HDU 1019
#include <iostream>
using namespace std;
long a[1000];
long gcd(long x, long y)
{
if(y==0)
return x;
return gcd(y,x%y);
}
void main()
{
long n, t, i, j, x, y;
cin>>t;
while(t--)
{
cin>>n;
for(i=0; i<n; i++)
cin>>a[i];
for(i=1; i<n; i++)
{
long maxit, minit, m;
maxit = a[i]>a[i-1]?a[i]:a[i-1];
minit = a[i]<a[i-1]?a[i]:a[i-1];
m = gcd(maxit, minit);
a[i] = (minit/m)*maxit;
}
cout<<a[n-1]<<endl;
}
}