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 }

 

posted @ 2012-04-24 16:12  背着超人飞  阅读(229)  评论(0)    收藏  举报