最大公约数的算法实现
2011-08-11 17:57
162 查看
Table of Contents
1 GCD 算法的基本原理2 GCD 算法的实现
2.1 递归实现
2.2 迭代实现
1 GCD 算法的基本原理
GCD=Greatest Common Divisor欧几里德定理若 a=b×r+q 则gcd(a, b) = gcd(b, q).欧几里德定理的证明a = b × r + q
设c = gcd(a, b), a = m×c, b= n×c
q = a - b× r = (m - n × r)×c
下面证明 m-n×r与n互质:
假设不互质,则存在k使得 m-n×r = x×k, n = y×k.
则:
a = m×c = (n×r + x×k)×c = (y×r + x×k)×c×k
b = n×c = y×c×k
与 c=gcd(a, b) 矛盾。辗转相除法的算法实现
a = b × r_1 + q_1 if q_1 = 0 then return b else b = q_1 × r_2 + q_2 if q_2 = 0 then return q_1 else
……
直到找到GCD为止。
2 GCD 算法的实现
2.1 递归实现
int gcd(int a, int b) { if(!b) return a; else return gcd(b, a%b ); }
2.2 迭代实现
int gcd(int a, int b) { int c = a%b; while(c){ a = b; b = c; c = a % b; } return b; }
Author: visaya fan gmail.com]<visayafan[AT]gmail.com>
Date: 2011-08-11 18:01:00
HTML generated by org-mode 6.33x in emacs 23
相关文章推荐
- 求最大公约数算法(欧几里得算法)的实现!!!
- 算法之路----最大公约数和最小公倍数算法实现
- 经典算法(5)- 用二进制方法实现扩展的最大公约数(Extended GCD)
- 求两个数或多个数的最大公约数算法及其实现
- C语言求最大公约数(两种最简单的算法实现)
- 经典算法(4)- 用欧几里得算法实现扩展的最大公约数(Extended GCD)
- 求最大公约数的三种算法实现
- 动态聚类中 C-均值算法 (K-均值算法)的C++实现
- 一些算法的实现代码
- 带色彩恢复的视网膜增强算法实现 (MATLAB版本)
- 图像旋转算法与实现
- 算法:集合的划分原理及代码实现
- 使用 Node.js 实现图片的动态裁切及算法实例代码详解
- 【转载】【数据结构&&算法系列】KMP算法介绍及实现(c++ && java)
- 数据结构之---C语言实现最短路径之Floyd(弗洛伊德)算法
- 如何用栈实现递归与非递归的转换(一)三种遍历树的算法
- 哲学家进餐问题的算法与实现
- 算法第九节:求最大公约数和最小公倍数
- C语言实现基本PSO算法
- 一些算法的MapReduce实现——MapReduce Job的单元测试实例