Num 38 : HDOJ : 2028 Lowest Common Multiple Plus [ 多个数的最小公倍数 ]

本文介绍了求几个自然数最小公倍数的两种方法:分解质因数法与公式法,并通过AC代码展示了具体实现过程。代码通过循环计算并输出多个数的最小公倍数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


求几个自然数的最小公倍数,有两种方法:


        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


Problem Description
求n个数的最小公倍数。
 

Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
 

Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
 

Sample Input
  
  
2 4 6 3 2 5 7
 

Sample Output
  
  
12 70
 

AC代码:

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








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值