HDU 1019 Least Common Multiple

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

求m个数的最小公倍数

//AC

#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<string> using namespace std; int s(int a,int b)  //最小公倍数 {     if(a<b)     {         int t=a;         a=b;         b=t;     }     int n=a,m=b;     while(b)     {         int t=a%b;         a=b;         b=t;     }     return n/a*m; } int main() {     int a,b,n,m;     cin>>n;     while(n--)     {         cin>>m;         cin>>a;         for(int i=1; i<m; i++)         {             cin>>b;             a=s(a,b);         }         cout<<a<<endl;     } }

//Wrong Answer

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<string>
 using namespace std; int s(int a,int b) { if(a<b) { int t=a;
        a=b;
        b=t; } int p=a*b; while(b) { int t=a%b;
        a=b;
        b=t; } return p/a; } int main() { int a,b,n,m;
    cin>>n; while(n--) {
       cin>>m; if(m)
        cin>>a; for(int i=1;i<m;i++) {
           cin>>b;
           a=s(a,b); }
       cout<<a<<endl; } }
注意:

第二个代码错主要是因为返回最小公倍数时两数相乘再除以最大公约数,这种情况可能会溢出,超过int的范围,所以要先用一个数除以最大公约数再乘另一个数

你可能感兴趣的:(ACM,HDU,简单题)