如果m和n都是正整数 给定正整数n和正数m

08-20 汽车 投稿:荣珠雨
导读 大家好,0471房产来为大家解答以上的问题。如果m和n都是正整数,给定正整数n和正数m这个很多人还不知道,现在让我们一起来看看吧!1、辗转相...

大家好,0471房产来为大家解答以上的问题。如果m和n都是正整数,给定正整数n和正数m这个很多人还不知道,现在让我们一起来看看吧!

1、辗转相除法 开放分类: 数学、最大公约数 辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。

2、它是已知最古老的算法, 其可追溯至前300年。

3、它首次出现于欧几里德的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。

4、它并不需要把二数作质因子分解。

5、 证明: 设两数为a、b(b<a),求它们最大公约数(a、b)的步骤如下:用b除a,得a=bq�1+r�1(0≤r�1<b)。

6、若r�1=0,则(a,b)=b;若r�1≠0,则再用r�1除b,得b=r�1q�2+r�2(0≤r�2<r�1)。

7、若r�2=0,则(a,b)=r�1,若r�2≠0,则继续用r�2除r�1,……如此下去,直到能整除为止。

8、其最后一个非零余数即为(a,b)。

9、 [编辑] 算法 辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的: 1. 若 r 是 a ÷ b 的余数, 则 gcd(a,b) = gcd(b,r) 2. a 和其倍数之最大公因子为 a。

10、 另一种写法是: 1. a ÷ b,令r为所得余数(0≤r<b) 若 r = 0,算法结束;b 即为答案。

11、 2. 互换:置 a←b,b←r,并返回第一步。

12、 [编辑] 虚拟码 这个算法可以用递归写成如下: function gcd(a, b) { if a mod b0 return gcd(b, a mod b); else return a; } 或纯使用循环: function gcd(a, b) { define r as integer; while b ≠ 0 { r := a mod b; a := b; b := r; } return a; } 其中“a mod b”是指取 a ÷ b 的余数。

13、 例如,123456 和 7890 的最大公因子是 6, 这可由下列步骤看出: a b a mod b 123456 7890 5106 7890 5106 2784 5106 2784 2322 2784 2322 462 2322 462 12 462 12 6 12 6 0 只要可计算余数都可用辗转相除法来求最大公因子。

14、这包括多项式、复整数及所有欧几里德定义域(Euclidean domain)。

15、 辗转相除法的运算速度为 O(n2),其中 n 为输入数值的位数。

本文到此分享完毕,希望对大家有所帮助。

声明:生活头条网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系admin@gdcyjd.com