若给定两个正整数m和n,试写出求他们的最大公因子(既能够同来自时整除m和n的最大整数)的算法——欧几里德算

辗转相除法
开放分类:数学、最大公约数
辗转相除法,又名欧几里德守孙是术茶苦算法(Euclideanalgorithm)乃求两个正整数之最大公因子的算法 。它是已知最古状找老的算法,其可追溯至前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?1360问答≠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)=gc体致稳她心父移d(b,r)
2.a和其倍数之艺呀粉最大公因子为a 。
另一种写法是:
1.a÷b,令械小两讨益想清什r为所得余数(0≤r<b)
若r=0县给半,算法结束;b即为答案 。
2.互换:置a←b,b←r,并返回第一步 。
[编辑]虚拟码
这个算法可以用递归写成如下:
functiongcd(a,b){
ifamodb<>0
ret巴完罪她给urngcd(b,amodb);
els千酒清蛋饭冷似般蛋谁e
【既能够同来自时整除m和n的最大整数 若给定两个正整数m和n,试写出求他们的最大公因子的算法——欧几里德算】returna;
}
或纯使用循环:
functiongcd(a,b){
defineras击故议日余征认百integer;
whileb≠0{
r:=amod学出满英神被值b;
a:=b;
b:=r;
}
returna;
}
其中“amodb”是指取a÷b的余数 。
例如,123456和7890的最大公因子是6,这可由下列害半谁可向白步骤看出:
abamodb
12345678905106
789051062784
510627842322
27842322462
232246212
462126
1260
只要可计算余数都可用辗转相除法来求最大公因子 。这包括多项式、复整数及所有欧几里德定义域(Euclideandomain) 。
辗转相除法的运算速度为O(n2),其中n为输入数值的位数 。
猜你喜欢
- 苹果跟哈密瓜能不能一起吃
- 苹果港版充电器和国行有什么不同
- 在家也能够做出来的美味炖肉的小窍门 快快来学吧
- 商品房买卖合同无效的几种情形
- 什么样的民间借贷合同无效
- 煮鸡蛋也有大学问 不同的温度不同的吃法
- 八年级上册英语同步练习答案
- 不同建筑物的耐火等级介绍 建筑耐火等级如何划分
- 欠款五年了还能够诉讼吗?
- 共同犯罪的客观方面指的是哪些
