文章标题 欧几里得求两数的最大公约数,最小公倍数。
2016-09-11 21:52
309 查看
求有两个数a,b的最大公约数。
假设a>b;
设 a = kb + c;
设 a 和 b 的最大公约数为 d ,则可得
a = p * d; b = q * d ;
则 c = a - kb = p*d - k*b = p*d -k*q*d =( p - k*q ) * d;
因为p,q 互质,所以p 与 p - k*q 互质,所以c,b的最大公约数为d。
所以求a、b的最大公约数就是就b,与a%b的最大公约数,直到整除为止。
下面给出两种方法:
递归:
循环体
当求出a,b的最大公约数后,就很容易求出两数的最小公倍数了
只要
gbd ( a , b ) =a/gcd(a,b)*b
先除再乘是防止爆int
假设a>b;
设 a = kb + c;
设 a 和 b 的最大公约数为 d ,则可得
a = p * d; b = q * d ;
则 c = a - kb = p*d - k*b = p*d -k*q*d =( p - k*q ) * d;
因为p,q 互质,所以p 与 p - k*q 互质,所以c,b的最大公约数为d。
所以求a、b的最大公约数就是就b,与a%b的最大公约数,直到整除为止。
下面给出两种方法:
递归:
int gcd ( int a, int b ) { if ( b==0 ) return a; return gcd ( b, a%b ); }
循环体
int gcd ( int a, int b ) { while ( b!=0 ) { int temp=a%b; a=b; b=temp; } return a; }
当求出a,b的最大公约数后,就很容易求出两数的最小公倍数了
只要
gbd ( a , b ) =a/gcd(a,b)*b
先除再乘是防止爆int
相关文章推荐
- [备忘]求两数最大公约,最小公倍数
- 文章标题 51nod 最大公约数之和
- [复习]欧几里得 最大公约数与最小公倍数
- java求两数最大公约数和最小公倍数
- 两数的最大公约数、最小公倍数
- 两数的最大公约数、最小公倍数
- 求两数最大公约数和最小公倍数
- noip2009 hankson的趣味题 (扩展欧几里得求最大公约数,最小公倍数与最大公约数)
- 求两数最大公约数,最小公倍数-Java
- 求两数最大公约数和最小公倍数
- acm-求两数最大公约数和最小公倍数
- C++实验7——最大公约数和最小公倍数
- 为什么这样也能求出最小公倍数最大公约数?
- 最大公约数,最小公倍数(C语言实现)
- 数论(1):最大公约数和最小公倍数(Gcd&Lcm)
- 最大公约数及最小公倍数是个什么东西
- python如何求解两数的最大公约数
- 2015年oj:最大公约数,最小公倍数
- Python入门练习0005:输出最大公约数 & 最小公倍数
- Vijos P1131 最小公倍数和最大公约数问题【暴力】