HDU 1019 Least Common Multiple
这一题是比较基础的数论题了,求N个数的最小公倍数,思路就是先求出两个数的最小公倍数,然后再用这个最小公倍数与下一个数求最小公倍数,则得三个数的最小公倍数,然后再用这三个数的最小公倍数与第四个数求最小公倍数,得这四个数的最小公倍数……如此递推,就OK了。不过要注意算最小公倍数的时候小心数据溢出!
AC code:
View Code
1 #include <iostream> 2 using namespace std; 3 int n, m; 4 int arr[1000]; 5 6 int gcd(int a, int b) //求出最大公约数 7 { 8 if(b) 9 return gcd(b, a % b); 10 else 11 return a; 12 } 13 int lcm(int a, int b) //注意这里不能用a*b/gcd(a,b),数据会溢出 14 { 15 return a / gcd(a, b) * b; 16 } 17 int main() 18 { 19 while(scanf("%d", &n) != EOF) 20 { 21 while(n--){ 22 scanf("%d", &m); 23 int first; 24 scanf("%d", &first); 25 for (int i = 1; i < m; i++) //两两计算最小公倍数 26 { 27 scanf("%d", &arr[i]); 28 first = lcm(first, arr[i]); 29 } 30 printf("%d\n", first); 31 } 32 } 33 }
