zoukankan      html  css  js  c++  java
  • Least Common Multiple 多个数的最小公倍数

    Least Common Multiple

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
    Total Submission(s) : 43   Accepted Submission(s) : 10

    Font: Times New Roman | Verdana | Georgia

    Font Size:

    Problem Description

    The least common multiple (LCM) of a set of positive integers is the smallest positive integer which is divisible by all the numbers in the set. For example, the LCM of 5, 7 and 15 is 105.

    Input

    Input will consist of multiple problem instances. The first line of the input will contain a single integer indicating the number of problem instances. Each instance will consist of a single line of the form m n1 n2 n3 ... nm where m is the number of integers in the set and n1 ... nm are the integers. All integers will be positive and lie within the range of a 32-bit integer.

    Output

    For each problem instance, output a single line containing the corresponding LCM. All results will lie in the range of a 32-bit integer.

    Sample Input

    2
    3 5 7 15
    6 4 10296 936 1287 792 1
    

    Sample Output

    105
    10296
    

    Source

    East Central North America 2003, Practice
    这就是辗转相除法的原理。
      辗转相除法的格式
    例如,求(319,377):
    ∵ 377÷319=1(余58)
    ∴(377,319)=(319,58);
    ∵ 319÷58=5(余29),
    ∴ (319,58)=(58,29);
    ∵ 58÷29=2(余0),
    ∴ (58,29)= 29;
    ∴ (319,377)=29.
    可以写成右边的格式。
    用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止.最后所得的那个最大公约数,就是所有这些数的最大公约数
    #include<iostream>
    using namespace std;
    int check(int a,int b)//辗转相除 与大小无关
    {
        if(b==0) return a;
        return check(b,a%b);
    
    
    
    }
    int main()
    {
        int n;
        int m;
        int x,y;
        int sum;
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=0;i<n;i++)
            {
                sum=0;
                x=1;//处理一个输入数据的情况
                cin>>m;
                for(int j=0;j<m;j++)
                {
                cin>>y;
                sum=x/check(x,y)*y;    //最小公约数与顺序无关    
                x=sum;
                        
                    
    
                    
                
                }
                cout<<sum<<endl;
            
            
            }
        
        }
        
        
        
    
    
    
    
    
    
        return 0;
    
    }//最小公倍数=两数的乘积/最大公约
  • 相关阅读:
    HDU 2544 最短路
    HDU 3367 Pseudoforest
    USACO 2001 OPEN
    HDU 3371 Connect the Cities
    HDU 1301 Jungle Roads
    HDU 1879 继续畅通工程
    HDU 1233 还是畅通工程
    HDU 1162 Eddy's picture
    HDU 5745 La Vie en rose
    HDU 5744 Keep On Movin
  • 原文地址:https://www.cnblogs.com/2013lzm/p/3255980.html
Copyright © 2011-2022 走看看