欧几里得算法和Stein算法【数论】
来源:互联网 发布:鸟哥linux基础篇 编辑:程序博客网 时间:2024/05/23 07:23
欧几里得算法:
int gcd(int a,int b){return b?gcd(b,a%b):a;}定理:两个整数的最大公约数等于其中较小的那个数和两数的相除余数的最大公约数。最大公约数(greatest common divisor)缩写为gcd。
将一个2个数的除法写成带余除法的形式:
y=ax+b
则b=y%x
欧几里得算法便基于如下恒等式
gcd(a,b)=gcd(b,a%b)
也就是辗转相除法
辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的:
⒈ 若 r 是 a ÷ b 的余数,且r不为0, 则
gcd(a,b) = gcd(b,r)
⒉ a 和其倍数之最大公因子为 a。
另一种写法是:
⒈ 令r为a/b所得余数(0≤r<b)
若 r= 0,算法结束;b 即为答案。
⒉ 互换:置 a←b,b←r,并返回第一步。
欧几里得算法在longlong以内还可,但如果是超过了longlong的就比较慢;
优化:Stein算法
这个方法也是计算两个数的最大公约数。和欧几里德算法不同的是,Stein算法只有整数的移位和加减法,这对于程序设计者是一个福音。gcd(a,a) = a,也就是一个数和他自身的公约数是其自身
gcd(ka,kb) = k gcd(a,b),也就是最大公约数运算和倍乘运算可以交换,特殊的,当k=2时,说明两个偶数的最大公约数必然能被2整除
int gcd(int a,int b){if(a<b) //arrange so that a>b{int temp = a;a = b;b=temp;}if(0==b) //the base casereturn a;if(a%2==0 && b%2 ==0) //a and b are evenreturn 2*gcd(a/2,b/2);if (a%2 == 0) // only a is evenreturn gcd(a/2,b);if (b%2==0)// only b is evenreturn gcd(a,b/2);return gcd((a-b)/2,b);// a and b are odd}
1 0
- 欧几里得算法和Stein算法【数论】
- 关于欧几里得算法和Stein算法
- 最小公约数(欧几里得算法&&stein算法)
- 欧几里德算法和stein算法
- 数论(欧几里得算法)
- 【数论】扩展欧几里得算法
- 数论-扩展欧几里得算法
- 数论-扩展欧几里得算法
- Stein算法
- 欧几里得算法&&扩展欧几里得算法<数论>
- 数论之欧几里得与拓展欧几里得算法
- 数论之欧几里得算法hdu1019
- 【模板】【数论】扩展欧几里得算法
- 欧几里得算法和唯一分解定理(数论)
- 欧几里得算法和唯一分解定理(数论)
- 使用stein 算法计算 最大公约数和最小公倍数
- 使用stein 算法计算 最大公约数和最小公倍数
- Stein算法 求最大公约数
- CentOS下安装中文输入法、gcc、g++、gdb
- Java-异常
- 使用eclipse直接生成so文件
- Android 手机自动化测试工具
- TCP/IP详解:第一、二章读书笔记
- 欧几里得算法和Stein算法【数论】
- iOS 7及以上,随时改变UIStatusBar颜色
- JS eval()函数
- 一个数学问题
- 文件压缩原理
- Android Studio如何同NDK集成
- 如果需要修改表格,在eclipse 中需要做什么操作
- Android Volley完全解析(四),从源码的角度理解Volley
- 胃疼