博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gcd和exgcd和lcm
阅读量:5339 次
发布时间:2019-06-15

本文共 653 字,大约阅读时间需要 2 分钟。

Gcd

欧几里得算法又称辗转相除法,用于计算两个正整数 a, b 的最大公约数。
计算公式为 gcd(a,b) = gcd(b,a mod b)。
公式无需证明,记忆即可。
如果要求多个数的最大公约数。易证,每次取出两个数再放回去,不会影响答案正
确性。
比如 a,b,c 三个数,答案就是 gcd(gcd(a,b),c)

int gcd(int a, int b){if (!b) return a;return gcd(b, a % b);}

 

 

扩展 Gcd

求出 ax + by = gcd(a,b)的一组可行解。

 

 

 

void exgcd(int a,int b,int& d,int& x,int& y){    if(!b)    {        d=a;                x=1;                y=0;    }    else    {        exgcd(b,a%b,d,y,x);        y-=x*(a/b);    }}

 

 

LCM 最小公倍数

lcm(m,n) = (m * n) / gcd(m,n)
我们使用刚刚的欧几里得算法求出 gcd 后,即可求得 lcm。
如果要求解多个数的最小公倍数,则做法与 gcd 类似。
比如有 a,b,c 三个数,答案就是 lcm(lcm(a,b),c)

转载于:https://www.cnblogs.com/darlingroot/p/10345011.html

你可能感兴趣的文章
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
MATLAB作图方法与技巧(一)
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
eclipse-将同一个文件分屏显示
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
windows编程ASCII问题
查看>>
.net webService代理类
查看>>
Code Snippet
查看>>
Node.js Express项目搭建
查看>>
zoj 1232 Adventure of Super Mario
查看>>
1201 网页基础--JavaScript(DOM)
查看>>
组合数学 UVa 11538 Chess Queen
查看>>