`
xitongyunwei
  • 浏览: 924604 次
文章分类
社区版块
存档分类
最新评论

最小公倍数(LCM)和最大公约数(GCD)

 
阅读更多
lcm(a, b) = (a*b)/gcd(a,b) (证明可以根据数论里的“每个数都可以表示成素因子的乘积”)

gcd(a,b)可用欧几里得算法求解,但在用上面公式计算lcm(a,b)的时候,a*b有可能会溢出,所以要定义合适的类型,以免溢出。

另外,对于求解多个数的最小公倍数或最大公约数,有如下公式可以参考:
(证明可以根据数论里的“每个数都可以表示成素因子的乘积”得到)
lcm(a1, a2, a3)=lcm(lcm(a1,a2),a3)
gcd(a1, a2, a3)=gcd(gcd(a1,a2),a3)

即每两个求解,先计算a1和a2的gcd(a1,a2),然后在计算gcd(a1,a2)和a3的gcd,以此类推下去,具体实现可参考如下代码,此为HDUOJ2028题。

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;
//lowest common multiple plus
//range is important, use long long, not int
long long gcd(long long a, long long b) {
	long long c = a>b?a:b;
	long long d = a<b?a:b;
	if(c%d==0) return d;
	else return gcd(d, c%d);
}
	
long long lcm(long long a, long long b){
	return (a*b)/gcd(a,b);
}
int main()
{
	int n;
	while(cin>>n) {
		long long *a = new long long[n];
		for(int i=0; i<n; i++) cin>>a[i];
		long long min = 1;
		for(int i=0; i<n; i++) {
			min = lcm(min,a[i]);
		}
		cout << min << endl;
		delete[]a;
	}
	return 0;
}



分享到:
评论

相关推荐

    最小公倍数c++.rar

    要求两个数的最小公倍数,最常用的方法是先找到这两个数的最大公约数(GCD),然后用两数的乘积除以它们的最大公约数。这种方法基于一个简单的数学原理:两个数的乘积等于它们的最大公约数和最小公倍数的乘积。即,...

    C++算法竞赛,数论基础授课ppt(包括素数筛、组合排列、最大公因数最小公倍数(gcd、lcm)及其代码)

    本ppt用于,数论基础授课,整体内容较为基础,ppt内容包括:素数筛、组合排列、最大公因数最小公倍数(gcd、lcm)等知识的讲解,以及模板代码,内容涵盖较为广泛,例题较为基础,并都有答案给出。后续还给出了三道...

    递归法求最大公约数和最小公倍数的实现代码

    今天整理了一下用递归法求最大公约数(gcd)和最小公倍数(lcm)。主要的工作是求最大公约数。数学上可以用辗转法求最大公约数

    C经典算法之最大公因数、最小公倍数、因式分解

    最大公因数使用辗转相除法来求,最小公倍数则由这个公式来求: GCD * LCM = 两数乘积

    最大公约数和最小公倍数.pdf

    在上述示例代码中,我们将两个整数`a`和`b`分别初始化为24和36,然后调用`gcd`函数计算最大公约数,并调用`lcm`函数计算最小公倍数。最后,输出结果。 注意:上述代码中未包含输入验证,需要根据实际情况进行输入...

    最大公约数和最小公倍.docx

    以下是使用C语言实现求解两个整数的最大公约数(GCD)和最小公倍数(LCM)的代码示例: ```c #include // 函数声明 int findGCD(int a, int b); int findLCM(int a, int b); // 主函数 int main() { int num1, ...

    PTA-公因数与公约数

    最大公因数(Greatest Common Divisor,简称GCD),也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。整数m和n的最大公约数记为GCD(m, n)。 最小公倍数(Least Common Multiple,简称LCM)是指两个...

    求最大公约数和最小公倍详细教程

    求解最大公约数和最小公倍数的方法有很多种,如质因数分解法、短除法、辗转相除法(欧几里得算法)等。 在实际应用中,这两个概念广泛应用于数学各个分支以及日常生活中,如分数化简、时间与速度问题、工程设计等...

    用VB求两个整数的最大公约数和最大公倍数

    本代码中,LCM 函数计算两个数的最小公倍数,而 GCD 函数计算两个数的最大公约数。最小公倍数等于两数之积除以它们的最大公约数。因此,我们可以通过调用 GCD 函数来计算最小公倍数。 直接调用 这两个函数就可以...

    Gcd&&Lcm(1).pptx

    这是一个关于学习最大公约数与最小公倍数的PPT,里面包含了程序编写以及各类知识点。知识点简练易懂。同时还可以到本人博客(寒假培训——GCD,LCM)中查询有关的例题链接并配有AC代码。

    最大公因数·最小公倍数计算器.cpp

    快速计算gcd,lcm

    简单的递归实现公约数与简单公倍数实现-你学会了吗

    lcm函数则通过先求得最大公约数,然后利用公式 LCM(a, b) = |a * b| / GCD(a, b) 计算最小公倍数。 请注意,在这个简单示例中,并未考虑输入的合法性检查与异常处理。在实际应用中,你可能需要对输入进行验证和处理...

    gcd_lcm.rar_gcd_gcd l

    求两个100以内整数的最大公约数和最小公倍数,只用加法和减法运算

    HDU1019(2028)解题报告

    Least Common Multiple ...先利用gcd算法求两个数的最大公约数,再考虑最小公倍数=两数乘积/最大公约数,即可求得最小公倍数。 注意:要考虑到输入的输入的n个数中的0,有0的要去掉0求其他数的最小公倍数。 代码:

    算法大全(c,c++)

    1.求两数的最大公约数 function gcd(a,b:integer):integer; begin if b=0 then gcd:=a else gcd:=gcd (b,a mod b); end ; 2.求两数的最小公倍数 function lcm(a,b:integer):integer; begin if a(a,b); lcm:=a; ...

    Gcd and Lcm-开源

    使用扩展 euclid 算法获得最大公约数和最小公倍数。 支持 GNU/Linux、Mac OS X。

    蓝桥杯介绍&心得&往年试题&相关练习

    2.gcd(最大公约数)和lcm(最小公倍数)关系及板子 关系:若a,b&gt;0 那么a*b=gcd(a,b)*lcm(a,b) gcd板子(太常用了): e2f67980fab44a379142cf4f0da0b9be.png def gcd(a,b): while b: a,b=b,a%b return ...

    10.第十章 函数.txt

    例:求任意两个正整数的最大公约数(GCD)和最小公倍数(LCM)。 /*求最大公约数用辗转相除法*/ #include int main() { int i1,i2,i3,i4,gcd,lcm,temp; printf("Input i1 and i2:"); scanf("%d%d",&i1;,&i2;...

    算法大全C、C++

    1.求两数的最大公约数 function gcd(a,b:integer):integer; begin if b=0 then gcd:=a else gcd:=gcd (b,a mod b); end ; 2.求两数的最小公倍数 function lcm(a,b:integer):integer; begin if a(a,b); lcm:=a...

    acm模板(全)

    2.2 最小公倍数lcm 22 2.3 快速幂取模B^LmodP(O(logb)) 22 2.4 Fermat小定理 22 2.5 Rabin-Miller伪素数测试 22 2.6 Pollard-rho 22 2.7 扩展欧几里德算法extended-gcd 24 2.8 欧拉定理 24 2.9 线性同余方程ax≡b...

Global site tag (gtag.js) - Google Analytics