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

285 篇文章 1 订阅
103 篇文章 0 订阅


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.利用最大公约数求最小公倍数
  //      ②用求得的最小公倍数和下一个数重复上一步骤直到结束


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值