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循环:

 LL gcd(LL a, LL b){
LL t;
while(b){
t = b;
b = a % b;
a = t;
}
return a;
}

递归:

 LL gcd(LL a, LL b){
return b ? gcd(b, a%b) : a;
}

求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

数论----gcd和lcm的更多相关文章

  1. 简单数论总结1——gcd与lcm

    并不重要的前言 最近学习了一些数论知识,但是自己都不懂自己到底学了些什么qwq,在这里把知识一并总结起来. 也不是很难的gcd和lcm 显而易见的结论: 为什么呢? 根据唯一分解定理: a和b都可被分 ...

  2. GCD and LCM HDU 4497 数论

    GCD and LCM HDU 4497 数论 题意 给你三个数x,y,z的最大公约数G和最小公倍数L,问你三个数字一共有几种可能.注意123和321算两种情况. 解题思路 L代表LCM,G代表GCD ...

  3. HDU 4497 GCD and LCM(数论+容斥原理)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  4. 数论——算数基本定理 - HDU 4497 GCD and LCM

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  5. HDU4497 GCD and LCM(数论,质因子分解)

    HDU4497 GCD and LCM 如果 \(G \% L != 0\) ,那么输出 \(0\) . 否则我们有 \(L/G=(p_1^{r_1})\cdot(p_2^{r_2})\cdot(p_ ...

  6. HDU4497——GCD and LCM

    这个题目挺不错的,看到是通化邀请赛的题目,是一个很综合的数论题目. 是这样的,给你三个数的GCD和LCM,现在要你求出这三个数有多少种可能的情况. 对于是否存在这个问题,直接看 LCM%GCD是否为0 ...

  7. Least Common Multiple (HDU - 1019) 【简单数论】【LCM】【欧几里得辗转相除法】

    Least Common Multiple (HDU - 1019) [简单数论][LCM][欧几里得辗转相除法] 标签: 入门讲座题解 数论 题目描述 The least common multip ...

  8. HDOJ 4497 GCD and LCM

    组合数学 GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  9. hdu 4497 GCD and LCM 数学

    GCD and LCM Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4 ...

随机推荐

  1. 转载:C++函数中new一块内存,作为返回值

    转载来自:http://blog.itpub.net/7728585/viewspace-2123621/ 今天遇到一个问题,C++编程时,函数中new一块内存,然后将申请内存的指针作为返回值.怎么d ...

  2. Spring boot 定制自己的错误

    1).如何定制错误的页面: ​ 1).有模板引擎的情况下:error/状态码; [将错误页面命名为 错误状态码.html 放在模板引擎文件夹里面的 error文件夹下],发生此状态码的错误就会来到 对 ...

  3. MFC中在picture control中显示CBitmap图像的方法

    CStatic *pStatic1 = (CStatic *)GetDlgItem(IDC__IMAGE_STATIC2); CBitmap cbmp; cbmp.LoadBitmap(MAKEINT ...

  4. 页面中的checkbox多选值获取

    依据name名称获取选中值 var arr=document.getElementsByName("name");arr是一个数组,就是所有checkbox的值:for(i=0;i ...

  5. 尚硅谷springboot学习11-占位符

    1.随机数 2.占位符获取之前配置的值,如果没有可以使用:指定默认值

  6. 强制停止ORACLE数据库

    操作环境 SuSE+Oracle11gR2 适用场景 shutdown immediate停止数据库失败 操作命令 1.kill掉oracle实例相关进程 2.清除oracle占用的共享内存段 ipc ...

  7. thread == 票池

    public class ThreadDemo2 { public static void main(String[] args){ TicketPool tp = new TicketPool(); ...

  8. C++与java编程区别(一)

    转载自http://blog.sina.com.cn/s/blog_75f4e17c0101295o.html C++ HelloWorld main.cpp #include< iostrea ...

  9. spring boot 集成Thymeleaf

                                           

  10. Docker虚拟化平台

    1.虚拟化技术的概念 1)虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒,让计算机的元件运行在虚拟的基础上,而不是真实的物理设备: 2)虚拟化技术可以将物理机硬件资源虚拟生成单 ...