ACM数论之旅3---最大公约数gcd和最小公倍数lcm(苦海无边,回头是岸( ̄∀ ̄))...
gcd(a, b),就是求a和b的最大公约数
lcm(a, b),就是求a和b的最小公倍数
然后有个公式
a*b = gcd * lcm ( gcd就是gcd(a, b), ( •̀∀•́ ) 简写你懂吗)
解释(不想看就跳过){
首先,求一个gcd,然后。。。
a / gcd 和 b / gcd 这两个数互质了,也就是 gcd( a / gcd ,b / gcd ) = 1,然后。。。
lcm = gcd * (a / gcd) * (b / gcd)
lcm = (a * b) / gcd
所以。。a*b = gcd * lcm
}
所以要求lcm,先求gcd
辣么,问题来了,gcd怎么求
辗转相除法
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 if(b == 0) return a; 3 else return gcd(b, a%b); 4 } 5 6 LL gcd(LL a, LL b){ 7 return b ? gcd(b, a%b) : a; 8 } 9 //两种都可以
辣么,lcm = a * b / gcd
(注意,这样写法有可能会错,因为a * b可能因为太大 超出int 或者 超出 longlong)
所以推荐写成 : 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)
S = 9,a = 4,b = 6,小数不会lcm,只好保留分数形式去通分约分。
当我看到右边那个公式。。。。
(╯°Д°)╯┻━┻
这TM我怎么想的到,给我证明倒是会证。 T_T
转载于:https://www.cnblogs.com/linyujun/p/5167914.html
ACM数论之旅3---最大公约数gcd和最小公倍数lcm(苦海无边,回头是岸( ̄∀ ̄))...相关推荐
- Problem B: 编写函数:求最大公约数gcd()和最小公倍数lcm() (Append Code) 山东科技大学 oj
题目描述 辗转相除法,也称欧几里得算法,是求最大公约数的算法.辗转相除法首次出现于欧几里得的<几何原本>(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的<九章算术> ...
- 最大公约数GCD与最小公倍数LCM
一.最大公约数(GCD) 最大公约数的递归:1.若a可以整除b,则最大公约数是b 2.如果1不成立,最大公约数便是b与a%b的最大公约数. 辗转相除法. 1.欧几里得算法(辗转相除法) int ...
- C语言求二个数的最大公约数gcd和最小公倍数lcm(附完整源码)
求二个数的最大公约数和最小公倍数 实现以下接口 实现卡最大公约数和最小公倍数完整源码(定义,实现,main函数测试) 实现以下接口 int gcd(int a, int b);//求最大公约数 int ...
- Python最大公约数gcd、最小公倍数lcm
1. 最大公约数 最大公约数(Greatest Common Divisor)缩写为GCD 这里求最大公约数的方法为辗转相除法 a, b = map(int, input('请输入两个数字,其间用空格 ...
- 最大公约数(gcd)和最小公倍数(lcm)的多种解法 Java 实现
下面总共介绍了四种最大公约数的求解方法和一个最小公倍数的求解方法 该代码的视频讲解 [300题刷题挑战]leetcode力扣 最大公约数和最小公倍数的多种解法 GCDandLCM第八十三题 | 数学方 ...
- acm数论之欧几里得gcd
1.欧几里得定理 同余定理的公式:(a+b)%mod=(a%mod+b%mod)%mod (a*b)%mod=(a%mod*b%mod)%mod 扩展欧几里得也有自己的一个公式:a*x+b*y=gcd ...
- ACM数论之旅17---反演定理 第一回 二项式反演(神说要有光 于是就有了光(´・ω・`))...
终于讲到反演定理了,反演定理这种东西记一下公式就好了,反正我是证明不出来的~(-o ̄▽ ̄)-o 首先,著名的反演公式 我先简单的写一下o( ̄ヘ ̄*o) 比如下面这个公式 f(n) = g(1) + g ...
- ACM数论之旅4---扩展欧几里德算法(欧几里德(・∀・)?是谁?)
为什么老是碰上 扩展欧几里德算法 ( •̀∀•́ )最讨厌数论了 看来是时候学一学了 度娘百科说: 首先, ax+by = gcd(a, b) 这个公式肯定有解 (( •̀∀•́ )她说根据数论中的相 ...
- ACM数论之旅2---快速幂,快速求a^b
如果题目说数据很大,还需要求余,那么代码就可以这么写 LL pow_mod(LL a, LL b){//a的b次方LL ret = 1;while(b != 0){if(b % 2 == 1){ret ...
最新文章
- 第一次使用Android Studio时你应该知道的一切配置(二):新建一个属于自己的工程并安装Genymotio...
- C++调用web服务(java事例供参考)
- 3、常用数据库访问接口简介
- 神经网络 online problem class反馈
- STL - bitset
- 毕业2年,我的工作小结
- 京东抢购茅台Python打包版
- Oracle rac 组件reload,亲测Linux 7系列 上安装Oracle RAC 遇到的问题和坑
- POJ NOI0101-08 字符三角形
- 最短路+状压DP【洛谷P3489】 [POI2009]WIE-Hexer
- RAID (HP)双循环
- ArrayList学习[常用方法|源码]
- 2015到3020计算机参考文献,2015版参考文献著录规则新变
- Speedtest在线测试html,Speedtest by Ookla:网络测速插件
- 阿里云服务器购买价格表:国内和国外地域云服务器活动报价表
- vps、云服务器、虚拟主机
- python坑爹的黑店_曝光米兰爱马仕黑店极其坑爹配货经验!大家不要再白白上当了!...
- GO语言学习资源整理
- Java 8新特性:Optional类
- Redis 事件机制详解