数论----gcd和lcm
gcd即最大公约数,lcm即最小公倍数。
首先给出a×b=gcd×lcm
证明:令gcd(a,b)=k,a=xk,b=yk,则a×b=x*y*k*k,而lcm=x*y*k,所以a*b=gcd*lcm。
所以求lcm可以先求gcd,而求gcd的方法就是辗转相除法,也叫做欧几里德算法,核心为gcd(m,n)=gcd(n,m%n)
证明:令 k=gcd(m,n),则 k|m 并且 k|n;
令 j=gcd(n, m mod n), 则j|n 并且 j|(m mod n);
对于m, 可以用n 表示为 m=pn+(m mod n);
由引理可知 j|m(其中 x=p,y=1), 又 j|n,于是 j 是 m 和 n 的公约数(但不一定是最大的);
因为 k 是 m 和 n 的最大公约数,所以必有 k≥j;
通过另一种表示形式:(m mod n)=m-pn,同理可得:
k|(m mod n),又k|n,于是 k 是 (m mod n) 和 n 的公约数(也不一定是最大的);
同样由 j 是 n 和 (m mod n) 的最大公约数可以得到 j≥k;
由常识,得出结论 k=j,
即gcd(m,n) = gcd(n, m mod n) ,得证。
代码实现:
while循环:
1 LL gcd(LL a, LL b){ 2 LL t; 3 while(b){ 4 t = b; 5 b = a % b; 6 a = t; 7 } 8 return a; 9 }
递归:
1 LL gcd(LL a, LL b){ 2 return b ? gcd(b, a%b) : a; 3 }
求lcm=a*b/gcd即可,但碰到一些恐怖的数据可能会溢出,应改成lcm=a/gcd*b。
最后给出一些公式:
gcd(ka, kb) = k * gcd(a, b)
lcm(ka, kb) = k * lcm(a, b)
lcm(S/a, S/b) = S/gcd(a, b)
参考:https://www.cnblogs.com/ider/archive/2010/11/16/gcd_euclid.html
https://www.cnblogs.com/linyujun/p/5167914.html
转载于:https://www.cnblogs.com/FrankChen831X/p/10526233.html
数论----gcd和lcm相关推荐
- 数论(一)——素数,GCD,LCM
这是一个数论系列:) 一.素数 ×费马小定理 Theorem: 设 p 是一个素数,a 是一个整数且不是 p 的倍数,那么 很遗憾,费马小定理的逆定理是不成立的.对 a = 2,满足的非素数 n 是存 ...
- 已知gcd和lcm求a+b最小和?------数论
题意 给出2个数a,b的 gcd(最大公约数n) 和 lcm(最小公倍数m),求所有符合条件的a,b中, 的最小 值. 思路 暴力枚举.根据 gcd(a,b)lcm(a,b)=ab 我们可以得到 ab ...
- GCD and LCM Aizu - 0005(辗转相除)+GCD LCM Inverse POJ - 2429(java或【Miller Rabin素数測试】+【Pollar Rho整数分解】)
题目:GCD and LCM Aizu - 0005 Write a program which computes the greatest common divisor (GCD) and the ...
- 浅析欧几里德算法 GCD和LCM
前言 欧几里德算法作为有着非常简短的实现的算法,可能很多初学者(包括当时的我)都不求甚解.本文给出了GCD.LCM的性质,以及欧几里德算法的实现.证明和时间复杂度推导. 这里是我的个人网站: http ...
- hdu-4497 GCD and LCM
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4497 题目大意: 给出三个数的gcd和lcm,求出这三个数有多少种可能性 解题思路: 设lcm / ...
- 1575 Gcd and Lcm
1575 Gcd and Lcm ∑i=1n∑j=1i∑k=1ilcm(gcd(i,j),gcd(i,k))设f(n)=∑i=1n∑j=1nlcm(gcd(i,n),gcd(j,n))f(p)=3p2 ...
- 【dfs】GCD与LCM(jzoj 1608)
GCD与LCM 题目大意: 给出a,b的最大公因数和最小公倍数,求出符合条件的a,b的最小差值 样例输入 6 36 样例输出 6 数据范围限制 提示 数据说明: 对于50%的数据,1<=a< ...
- YTU 3795 GCD 和 LCM
题目描述 编写一个程序,计算给定 aaa 和 bbb 的最大公约数 (GCD) 和最小公倍数 (LCM) . 0<a,b≤ 20000000000 lcm(a,b)≤2000000000 数据集 ...
- 【备战蓝桥】JavaB组算法小讲解——GCD和LCM
大家好,这里是祁十一!今天为大家整理了一下GCD和LCM的内容. 目录 一.GCD(最大公约数) 1.定义 2.性质 3.代码实现 <1>Java自带函数 <2>辗转相除法 二 ...
最新文章
- 6.java设计模式
- 【Linux】一步一步学Linux——ifup命令(152)
- 百度获取图片 json格式解析
- windows网络编程第二版 第三章 Internet Protocol 读书笔记
- 数据抽象能力---适合任何行业
- linux查看cpu占用率_Linux 性能查看
- DotDensityRenderer
- 软件工程——成品展示
- 五种 JSP页面跳转方法详解
- IE和ff下javascript解释的区别
- 澳洲CE毕业意向FullStackDeveloper
- Android 安装包没有签名文件问题
- 分享一下个人3年的运维经验
- 支付平台网站安全解决方案
- QGC编译报错error C2220: 警告被视为错误 最佳解决方法
- flutter中android子工程报错,Flutter混合Android
- Windows XP中手动安装驱动程序的方法
- 数学建模 | MATLAB学习 | 插值 一维插值函数、三次样条插值
- 2020年3月31日 生活思考 ~ 子贡论时
- hfs文件服务器模板,【全功能专用】Http File Server (HFS) 专用HFS模板 最终修订版