若给定两个正整数m和n,试写出求他们的最大公因子(既能够同时整除m和n的最大整数)的算法——欧几里德算
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/06 16:15:00
![若给定两个正整数m和n,试写出求他们的最大公因子(既能够同时整除m和n的最大整数)的算法——欧几里德算](/uploads/image/z/11634597-45-7.jpg?t=%E8%8B%A5%E7%BB%99%E5%AE%9A%E4%B8%A4%E4%B8%AA%E6%AD%A3%E6%95%B4%E6%95%B0m%E5%92%8Cn%2C%E8%AF%95%E5%86%99%E5%87%BA%E6%B1%82%E4%BB%96%E4%BB%AC%E7%9A%84%E6%9C%80%E5%A4%A7%E5%85%AC%E5%9B%A0%E5%AD%90%EF%BC%88%E6%97%A2%E8%83%BD%E5%A4%9F%E5%90%8C%E6%97%B6%E6%95%B4%E9%99%A4m%E5%92%8Cn%E7%9A%84%E6%9C%80%E5%A4%A7%E6%95%B4%E6%95%B0%EF%BC%89%E7%9A%84%E7%AE%97%E6%B3%95%E2%80%94%E2%80%94%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%B7%E7%AE%97)
若给定两个正整数m和n,试写出求他们的最大公因子(既能够同时整除m和n的最大整数)的算法——欧几里德算
若给定两个正整数m和n,试写出求他们的最大公因子(既能够同时整除m和n的最大整数)的算法——欧几里德算
若给定两个正整数m和n,试写出求他们的最大公因子(既能够同时整除m和n的最大整数)的算法——欧几里德算
辗转相除法
开放分类:数学、最大公约数
辗转相除法,又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法.它是已知最古老的算法,其可追溯至前300年.它首次出现于欧几里德的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》.它并不需要把二数作质因子分解.
证明:
设两数为a、b(b<a),求它们最大公约数(a、b)的步骤如下:用b除a,得a=bq?1+r?1(0≤r?1<b).若r?1=0,则(a,b)=b;若r?1≠0,则再用r?1除b,得b=r?1q?2+r?2(0≤r?2<r?1).若r?2=0,则(a,b)=r?1,若r?2≠0,则继续用r?2除r?1,……如此下去,直到能整除为止.其最后一个非零余数即为(a,b).
[编辑] 算法
辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的:
1.若 r 是 a ÷ b 的余数,则
gcd(a,b) = gcd(b,r)
2.a 和其倍数之最大公因子为 a.
另一种写法是:
1.a ÷ b,令r为所得余数(0≤r<b)
若 r = 0,算法结束;b 即为答案.
2.互换:置 a←b,b←r,并返回第一步.
[编辑] 虚拟码
这个算法可以用递归写成如下:
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 的余数.
例如,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
只要可计算余数都可用辗转相除法来求最大公因子.这包括多项式、复整数及所有欧几里德定义域(Euclidean domain).
辗转相除法的运算速度为 O(n2),其中 n 为输入数值的位数.
辗转相除法
辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法, 其可追溯至3000年前。它首次出现于欧几里德的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。它并不需要把二数作质因子分解。
证明:
设两数为a、b(b<a),求它们最大公约数(a、b)...
全部展开
辗转相除法
辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法, 其可追溯至3000年前。它首次出现于欧几里德的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。它并不需要把二数作质因子分解。
证明:
设两数为a、b(b<a),求它们最大公约数(a、b)的步骤如下:用b除a,得a=bq......r 1(0≤r)。若r1=0,则(a,b)=b;若r1≠0,则再用r1除b,得b=r1q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r2除r1,……如此下去,直到能整除为止。其最后一个非零余数即为(a,b)。
[编辑] 算法
辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的:
1. 若 r 是 a ÷ b 的余数, 则
gcd(a,b) = gcd(b,r)
2. a 和其倍数之最大公因子为 a。
另一种写法是:
1. a ÷ b,令r为所得余数(0≤r<b)
若 r = 0,算法结束;b 即为答案。
2. 互换:置 a←b,b←r,并返回第一步。
收起
辗转相除法