求几个自然数的最小公倍数,有两种方法:
1)分解质因数法:
先把这几个数分解质因数,再把它们一切公有的质因数和其中几个数公有的质因数以及每个数的独有的质因数全部连乘起来,所得的积就是它们的最小公倍数。
例如,求[12,18,20,60];
因为12=(2)×[2]×[3],18=(2)×[3]×3,20=(2)×[2]×{5},60=(2)×[2]×[3]×{5},其中四个数的公有的质因数为2(小括号中的数),三个数的公有的质因数为2与3[中括号中的数],两个数的公有的质因数为5{大括号中的数},每个数独有的质因数为3。
所以,[12,18,20,60]=2×2×3×3×5=180。
2)公式法:
由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(a,b)×[a,b]=a×b。所以,求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用上述公式求出它们的最小公倍数。
例如,求[18,20];
即得[18,20]=18×20÷(18,20)=18×20÷2=180。
求几个自然数的最小公倍数,可以先求出其中两个数的最小公倍数,再求这个最小公倍数与第三个数的最小公倍数,依次求下去,直到最后一个为止。
最后所得的那个最小公倍数,就是所求的几个数的最小公倍数。
题目:
Lowest Common Multiple Plus
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 41231 Accepted Submission(s): 17081
2 4 6 3 2 5 7
12 70
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int a[100010];
int lcm(int x,int y)
{
int temp;
if(y>x){temp=x;x=y;y=temp;}
temp=x;
while(x%y!=0) x+=temp;
return x;
}
int main()
{
int n,i,temp,num;
while(scanf("%d",&n)!=EOF)
{
for(i = 0; i < n; i++)
scanf("%d",&a[i]);
temp=lcm(a[0],a[1]);
for(i=2; i<n; i++)
{
temp=lcm(temp,a[i]);
}
printf("%d\n",temp);
}
return 0;
}