您的位置:首页 > 其它

2028 Lowest Common Multiple Plus(最小公倍数)

2014-07-09 11:25 309 查看


Lowest Common Multiple Plus

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 32233 Accepted Submission(s): 13126



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 gbs(int a,int b)
{
int m,n,i,t;
if(a<b)
{t=a;a=b;b=t;}
for(i=b;i>0;i--)
{
if((a%i==0)&&(b%i==0))
{
m=a/i;
n=b/i;
break;
}
}
return m*n*i;
}
void main()
{
int n,m[50],i,lcm;
while(cin>>n)
{
for(i=0;i<n;i++)
{cin>>m[i];}
lcm=gbs(m[0],m[1]);
for(i=2;i<n;i++)
{
lcm=gbs(lcm,m[i]);
}
cout<<lcm<<endl;
}
}

思路二(MAX容易超界,不推荐):1.几个数的最小公倍数必在其最大值与它们的积之间
2.从最大值开始循环,直到找到第一个能将所有数整除的数,该数即为所有数的最小公倍数
#include<iostream>
using namespace std;
void main()
{
long int n,m[100],i,j,max,MAX,tof;
while(cin>>n)
{
max=0;MAX=1;
for(i=0;i<n;i++)
{
cin>>m[i];
MAX*=m[i];
if(m[i]>max)
max=m[i];
}
for(i=max;i<=MAX;i++)
{
tof=0;
for(j=0;j<n;j++)
{
if(i%m[j]==0)
tof=1;
else {tof=0;break;}
}
if(tof==1)
{
cout<<i<<endl;
break;
}
}
}
}

//思路三:①求两数的最小公倍数:1.辗转相除求最大公约数 2.利用最大公约数求最小公倍数
//      ②用求得的最小公倍数和下一个数重复上一步骤直到结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: