euclid algorithm(greast common divisor)
来源:互联网 发布:大陆网络剧 ptt评论 编辑:程序博客网 时间:2024/04/29 17:24
#include <iostream>using namespace std;void swap(int &a, int &b){ int tmp; tmp = a; a = b; b = tmp;}int euclid_fun(int m ,int n){ if (n > m) swap(m, n); int r = m % n; while(r != 0) { m = n; n = r; r = m % n; } return n;}int main(){ int m = 24; int n = 30; int gcd = euclid_fun(m,n); cout << " the greatest common factor is : " << gcd << endl; return 0;}
#include <iostream>using namespace std;void swap(int &a, int &b){ int t; t = a; a = b; b = t;}int fuclid_fun(int &a, int &b){ if (b > a) swap(a,b); a = a % b; if (a == 0){ return b; }else { b = b % a; if ( b == 0) { return a; } else{ fuclid_fun( a, b); } }}int main(){ int a = 2166; int b = 6099; int gcd = fuclid_fun (a ,b); cout << gcd << endl; return 0;}
Proof of validity[1]
The validity of the Euclidean algorithm can be proven by a two-step argument.[16] In the first step, the final nonzero remainder rN−1 is shown to divide both a and b. Since it is a common divisor, it must be less than or equal to the greatest common divisor g. In the second step, it is shown that any common divisor of a and b, including g, must divide rN−1; therefore, g must be less than or equal to rN−1. These two conclusions are inconsistent unless rN−1 = g.
To demonstrate that rN−1 divides both a and b (the first step), rN−1 divides its predecessor rN−2
- rN−2 = qN rN−1
since the final remainder rN is zero. rN−1 also divides its next predecessor rN−3
- rN−3 = qN−1 rN−2 + rN−1
because it divides both terms on the right-hand side of the equation. Iterating the same argument, rN−1 divides all the preceding remainders, including a and b. None of the preceding remainders rN−2, rN−3, etc. divide a and b, since they leave a remainder. Since rN−1 is a common divisor of a and b, rN−1 ≤ g.
In the second step, any natural number c that divides both a and b (in other words, any common divisor of a and b) divides the remainders rk. By definition, a and b can be written as multiples of c: a = mc and b = nc, where m and n are natural numbers. Therefore, c divides the initial remainder r0, since r0 = a − q0b = mc − q0nc = (m − q0n)c. An analogous argument shows that c also divides the subsequent remainders r1, r2, etc. Therefore, the greatest common divisor g must divide rN−1, which implies that g ≤ rN−1. Since the first part of the argument showed the reverse (rN−1 ≤ g), it follows that g = rN−1. Thus, g is the greatest common divisor of all the succeeding pairs:[17][18]
- g = gcd(a, b) = gcd(b, r0) = gcd(r0, r1) = … = gcd(rN−2, rN−1) = rN−1.
example
a = 1071 and b = 462
[1]. http://en.wikipedia.org/wiki/Euclidean_algorithm
- euclid algorithm(greast common divisor)
- Euclid Greatest Common Divisor-GCD - 欧几里得 最大公约数
- GCD Algorithm(Greatest Common Divisor)
- Greatest Common Divisor (GCD) - Euclidean algorithm
- Algorithms - 最大公约数(greatest common divisor)-欧几里得(Euclid) 算法 及 代码
- greatest common divisor introduction to algorithm 3rd, example 31.2
- Algorithm: Euclid's Algorithm
- Algorithm: Extended Euclid's Algorithm
- euclid's algorithm
- Euclid‘s algorithm
- Greatest common divisor
- The Greatest Common Divisor
- Great common divisor 最大公约数
- GCD (Greatest Common Divisor)
- common divisor---求最大公约数
- Solving Greatest Common Divisor
- the max common divisor
- the greatest common divisor
- 偶然看见了,就收录下来,作为对自己的励志吧!
- LIB和DLL的区别与使用
- java List转换为字符串并加入分隔符的一些方法总结
- 【非常强大的Android图表引擎 - AChartSDK】
- platform模型什么时候用
- euclid algorithm(greast common divisor)
- 跟阿根一起学Java Web开发四:邮件发送与短信发送的实现
- 线段树面积并hdu3265
- 黑马程序员_Java 7K面试题—交通灯管理系统
- 菜鸟教程之工具使用(一)——Git的基本使用
- 将CMD命令行下命令输出的内容存到文件中
- 开关灯问题
- 高精度计算
- Java中this,static,super及final关键字和代码块