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;
}