我们看到这一题最先想到的是什么方法??
我想十有八九想到的都是暴力枚举的方法:先把全部的数字相乘,再从1开始枚举一直到有一个最小的数可以整除所有的数字。但作为上进的程序员,我们肯定会不禁想:这是啥啊,怎么这么拉啊。
所以我们才在这里遇见,寻求不拉的方法
那么在这里,我介绍的是用数学规律的解法:
关键思路:
1:两个数的最小公倍数等于两个数的乘积再除与两个数的最大公因数
2:重复使用辗转相除法得到最大的公因数(注意大小的先后问题,若是小的在前则要交换,故要先判断大小)
3:多个数的最小公倍数可以利用前面两个数的最小公倍数与下一个数求最小公倍数,如此直到最后一个数,便得到了多个数的最小公倍数
4:为了避免溢出,第一步不妨先用一个数除与最大公因数再乘于另一个数
#include<stdio.h>
int main()
{
int n,inset,o,p;
int temp,temp1;
while(scanf("%d",&n)!=EOF)
{
scanf("%d",&temp);
for(int i=0;i<n-1;i++)
{
scanf("%d",&temp1);
if(temp<temp1)
{
inset=temp;
temp=temp1;
temp1=inset;
}
o=temp;p=temp1;
while(o%p!=0)
{
inset=o%p;
o=p;
p=inset;
}
temp=temp/p*temp1;//避免了溢出
}
printf("%d\n",temp);
}
return 0;}