多项式辗转相除法求最大公约数_用辗转相除法求最大公约数

辗除法(

zhǎnchúfǎ

)

——

辗转相除法,又名欧几里德算法(

Euclidean algorithm

)乃求两

个正整数之最大公因子的算法。它是已知最古老的算法,其可追溯至

3000

年前。它首次出

现于欧几里德的《几何原本》(第

VII

卷,命题

i

ii

)中,而在中国则可以追溯至东汉出

现的《九章算术》。它并不需要把二数作质因子分解。

证明:

设两数为

a

b(b

求它们最大公约数

(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

)

r = 0

,算法结束;

b

即为答案。

2.

互换:置

a←b

b←r

,并返回第一步。

[

编辑

]

虚拟码

这个算法可以用递归写成如下

:

functiongcd(a, b) {

if b<>0

returngcd(b, a mod b);

else

return a;

}

或纯使用循环

:

functiongcd(a, b) {

define r as integer;

while b ≠ 0 {

r := a mod b;

a := b;

b := r;

你可能感兴趣的:(多项式辗转相除法求最大公约数)