1. 程式人生 > >深入淺出學演算法004-求多個數的最小公倍數

深入淺出學演算法004-求多個數的最小公倍數

4003: 深入淺出學演算法004-求多個數的最小公倍數
Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 3630 Solved: 983
Description

求n個整數的最小公倍數
Input

多組測試資料,先輸入整數T表示組數 然後每行先輸入1個整數n,後面輸入n個整數k1 k2…kn
Output

求k1 k2 …kn的最小公倍數
Sample Input

1
3 12 18 6

Sample Output

36
這道題剛開始沒有使用陣列,結果tle了;後來去大佬部落格看了下,改成陣列就過了

#include<stdio.h>
  int gcd(int x,int y)
    {
        int t=1;
        while(t!=0)
        {
            t=x%y;
            x=y;
            y=t;
        }
        return x;
    }
int lcm(int s[],int n)  
    {
        int num,i;
        for(i=0;i<n-1;i++)
        {
            num=gcd(s[i],s[i+1]);
            s[i+1]=s[i]/num*s[i+1]/num*num;
        }
        return s[n-1];
    } 
 int main()
{
    int t,n,m,i;
    while(scanf("%d",&t)!=EOF)
    {
        while(t--)
        {
            scanf("%d",&n);
            int s[n];
            for(i=0;i<n;i++)
            {
                scanf("%d",&s[i]);
            }
            m=lcm(s,n);
            printf("%d\n",m);
        }
    }
}