hdu2028

来源:互联网 发布:top域名不需要备案 编辑:程序博客网 时间:2024/04/27 15:13
 

/*欧几里德定理的非递归代码:
int gcd(int a,int b)
{
    while(b!=0)
    {
        int temp=a%b;
        a=b;
        b=a%b;   
    }
    return a;   
}
下面是递归代码:
using namespace std;
int gcd(int a,int b)
{
    if(b==0)return a;
    return gcd(b,a%b);
}
以前觉得求最大公约数的时候用上面的算法,必须用较大大数去mod较小的小数,今天仔细的看了下其实不用的,
如果是较小的数去mod较大的数,他会花费一个过程去交换数据的。*/


#include<iostream>
using namespace std;
int LCM(long int a,long int b)
{
    long int temp1=a;//暂存a、b的值
    long int temp2=b;
    while(temp2!=0)
    {
        long int temp=temp1%temp2;
        temp1=temp2;
        temp2=temp;
    }
    return a/temp1*b;//防止数据过大,溢出
}
int main()
{
    int N,i;
    long int a,b;
    while(cin>>N)
    {
        cin>>a;
        for(i=0;i<N-1;i++)
        {
            cin>>b;
            a=LCM(a,b);
        }
        cout<<a<<endl;
    }
    return 0;
}


Lowest Common Multiple Plus
http://acm.hdu.edu.cn/showproblem.php?pid=2028

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 12096    Accepted Submission(s): 4957

 

Problem Description
求n个数的最小公倍数。
 


Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
 


Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
 


Sample Input
2 4 6 3 2 5 7
 


Sample Output
12 70
 
 
#include<iostream>
using namespace std;
int main()
{
 int i,j,n,a[100],max,bei,k;
 while(cin>>n)
 {      
  if(n==0)break;
  max=0;
  for(i=0;i<n;i++) 
  {        
   cin>>a[i];
            if(a[i]>max)
    max=a[i];         
          }  
  bei=max; 
  do   
  {     
   k=0;
   for(j=0;j<n;j++)
    if(bei%a[j]!=0) 
     k=1;    
    if(k)   
     bei+=max;   
         }while(k);
  cout<<bei<<endl;
 }
 return 0;
}
 
 
#include<stdio.h>
int main()
{
 int n,i,j,s[100],max,t;
 while(scanf("%d",&n)!=EOF)
 {
  if(n==0)
   break;
  for(i=0;i<n;i++)
   scanf("%d",&s[i]);
  for(i=0;i<n-1;i++)
  {
   for(j=0;j<n-i-1;j++)
    if(s[j]>s[j+1])
    {
     t=s[j];
     s[j]=s[j+1];
     s[j+1]=t;
    }
  }
  max=s[n-1];
  for(i=n-2;i>=0;i--)
   if(max%s[i]!=0)
   {
    max+=s[n-1];
    i=n-1;
   }
  printf("%d\n",max);
 }
 return 0;
}
 
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int s[102],n,i,max;
    while(cin>>n)
 {
  if(n==0)break;
        for(i=0;i<n;i++)
            cin>>s[i];
        sort(&s[0],&s[n]);
        max=s[n-1];
        for(i=n-2; i>=0;i--)
  {
            if(max%s[i]!=0)
   {
                max+=s[n-1];
                i=n-1;
            }
        }
        cout<<max<<endl;
    }
    return 0;
}