由求两个的最大公约数、最小公倍数推广到求N个数的最大公约数,最小公倍数。

CODE:

AC 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h> 

 4

 5 __int64 gcd(__int64 a , __int64 b)
 6 {
 7     return b==0?a:gcd(a , b);
 8 }
 9 
10 int main()
11 {
12     __int64 n , m , a , b;
13     scanf("%I64d", &n);
14     while(n--)
15     {
16         scanf("%I64d", &m);
17         a=1;
18         while(m--)
19         {
20             scanf("%I64d", &b);
21             a = a / gcd(a,b)*b;
22         }
23         printf("%I64d\n", a);
24     }
25     return 0;

26 } 

 

 

 顺便贴下我TLE的递归代码,两次递归伤不起啊!!!

 CODE:

 TLE

 1 #include <string.h>
 2 #include <stdlib.h>
 3 #include <math.h>
 4 #include <stdio.h>
 5  using namespace std;
 6  
 7  
 8  const int maxn = 100001
 9  __int64 a[maxn];
10  __int64 b[maxn];
11  
12  
13  __int64 gcd(__int64 a , __int64 b)                    //递归求最小公约数 
14  {
15      return b==0?a:gcd(b , a%b);
16  }
17  
18  
19  
20  __int64 gcgn(__int64 a[] , __int64 n)                  //递归求N个数的最小公倍数 
21  {
22      if(n == 1 ) return a[0] / gcd(a[0] , a[1]) * a[1]; //边界处理 
23      else
24      {
25          b[0] = a[0] / gcd(a[0] , a[1]) * a[1];
26          for(int i = 1; i < n - 1; i++)
27          {
28              b[i] = a[i+1];
29          }
30          return gcgn(b , n-1);
31      }
32  }
33  
34  __int64 gcdn(__int64 a[] , __int64 n)                //递归求N个数的最大公约数 
35  {
36      if(n == 1return gcd(a[0] , a[1]); //边界处理 
37      else
38      {
39          b[0] = gcd(a[0] , a[1]);
40          for(int i = 1 ; i < n - 1; i++)
41          {
42              b[i] = a[i + 1];
43          }
44          return gcdn(b , n - 1);
45      }
46  }
47  
48  
49  
50  int main()
51  {
52      int t ;
53      while(~scanf("%d", &t)){
54      while(t--)
55      {
56          memset(a , 0 ,sizeof(a));
57          memset(b , 0 ,sizeof(b));
58          __int64 n;
59           scanf("%I64d", &n);
60          for(__int64 i = 0 ; i < n ; i++) 
61            scanf("%I64d", &a[i]);
62         if(a[0] == 0 || a[1] == 0) { printf("0\n"); break;}
63          int a1 = gcgn(a , n);
64          printf("%I64d\n", a1);
65      }
66  }
67      return 0;
68  }

posted on 2012-05-25 18:03  有间博客  阅读(251)  评论(0编辑  收藏  举报