HDU 2028 Lowest Common Multiple Plus

HDU 2028 Lowest Common Multiple Plus

 

这道题有意思,大致的思路有两种:

1、多个数求最小公倍数
//解题思路:
//先排序,然后求两个数的最小公倍数,然后把结果再与下一个数进行求最小公倍数
//最小公倍数等于两个数相乘除以他们的最大公约数

但是这会TLE。。。

2、还是用简单粗暴的方法吧。。。
//直接找最大的数,然后翻倍,看是不是所有的其他数的倍数就好了
然鹅还是TLE。。。

 

3、边输入边找,算出一开始输入的两个数的最小公倍数,然后每次输入一个数都更新这个最小公倍数

0ms过,让我怀疑前面两种方法我都写错了导致TLE。。。

#include <stdio.h>
#include <iostream>
#include <math.h>

using namespace std;

//多个数求最小公倍数
//解题思路:
//先排序,然后求两个数的最小公倍数,然后把结果再与下一个数进行求最小公倍数
//最小公倍数等于两个数相乘除以他们的最大公约数
//然而这样子不够快。。。

// 
// int GCD(int a, int b)
// {
// 	if(a == 0)
// 		return b;
// 	else
// 		GCD(b%a,a);
// }
// 
// void main()
// {
// 	int n;
// 
// 	while(scanf("%d",&n))
// 	{
// 		int *num = new int[n];
// 
// 		for(int i=0;i<n;i++)
// 			scanf("%d",&num[i]);
// 
// 		int nLast = num[0];
// 		for(int i = 1;i<n;i++)
// 		{
// 			int a = num[i];
// 			int b = nLast;
// 
// 			if(a > b)
// 			{
// 				int tmp;
// 				tmp = a;
// 				a = b;
// 				b = tmp;
// 			}
// 			int minP = GCD(a,b);
// 			if(minP == 0)
// 			{
// 				nLast = 0;
// 				break;
// 			}
// 			nLast = (a*b)/minP;
// 		}
// 		printf("%d\n",nLast);
// 	}
// }
// 


//还是用简单粗暴的方法吧。。。
//直接找最大的数,然后翻倍,看是不是所有的其他数的倍数就好了
//还是TLE

// 
// void main()
// {
// 	int n;
// 
// 	while(scanf("%d",&n))
// 	{
// 		int *num = new int[n];
// 		int nMax = 0;
// 		for(int i=0;i<n;i++)
// 		{
// 			scanf("%d",&num[i]);
// 			if(num[i] > nMax)
// 				nMax = num[i];
// 		}
// 		bool bFound = false;
// 		int factor = 1;
// 		int nGongbeishu = nMax;
// 		while(!bFound)
// 		{
// 			for(int i=0;i<n;i++)
// 			{
// 				if(nGongbeishu % num[i] != 0)
// 					break;
// 				if(i == n-1)
// 					bFound = true;
// 			}
// 			factor++;
// 			nGongbeishu = nMax*factor;
// 		}
// 
// 		printf("%d\n",nMax*(factor-1));
// 	}
// }

//方法三:
#include <stdio.h>
int main(void) {
	int n, a, b, i, ans, j;
	while (~scanf("%d", &n))
	{
		for (scanf("%d", &a), ans = 1, i = 1; i < n; i++)
		{
			scanf("%d", &b);
			for (j = 1; ans % b; j++)
				ans = j * a;
			a = ans;
		}
		printf("%d\n", a);
	}
	return 0;
}