欧几里德的真题和答案

欧几里德算法

欧几里德算法,也称为轮流除法,用于计算两个整数A和B的最大公约数..其计算原理取决于以下定理:

定理:gcd(a,b) = gcd(b,a mod b)

证明A可以表示为a = kb+r,那么R = A mod B。

假设d是a和b的公约数,那么有

D|a,d|b,r = a-kb,所以d|r

所以d是(b,a mod b)的公约数。

假设d是(b,a mod b)的公约数,那么

D | b,d |r,但是a = kb +r R。

所以d也是(a,b)的公约数。

所以(a,b)和(b,a mod b)的公约数相同,它们的最大公约数一定相等,证明了。

欧几里德算法就是基于这个原理,它的算法用C++语言描述为:

无效掉期(利息和利息。一、int & ampb)

{

int c = a;

a = b;

b = c;

}

int gcd(int a,int b)

{

如果(0 == a)

{

返回b;

}

如果(0 == b)

{

返回a;

}

如果(a & gtb)

{

互换(a,b);

}

int c;

for(c = a % b;c & gt0 ;c = a % b)

{

a = b;

b = c;

}

返回b;

}

模p乘法逆元素

对于整数A和P,如果有一个整数B满足ab mod p =1,那么B就是A的模P乘法的逆。

定理:A有模P的乘法逆的充要条件是gcd(a,p) = 1。

证明:

首先,证明充分性。

如果gcd(a,p) = 1,根据欧拉定理,aφ(p) ≡ 1 mod p,因此,

显然aφ(p)-1 mod p是模p乘法的逆。

重新证明必要性

假设P与模A的乘法逆是b。

ab 1 mod p

那么ab = kp +1,所以1 = ab-kp。

因为gcd(a,p) = d

所以d | 1

所以d只能是1。

扩展欧几里德算法

扩展的欧几里德算法不仅可以计算(A,B)的最大公约数,还可以计算模A、模B、模B的乘法逆,用C语言描述如下:

int gcd(int a,int b,int & ampar,int & ampbr)

{

int x1,x2,x3;

int y1,y2,y3;

int t1,t2,T3;

如果(0 == a)

{//如果一个数是0,就没有乘法逆。

ar = 0;

br = 0;

返回b;

}

如果(0 == b)

{

ar = 0;

br = 0;

返回a;

}

x 1 = 1;

x2 = 0;

x3 = a;

y 1 = 0;

y2 = 1;

y3 = b;

int k;

for(T3 = x3 % y3;t3!= 0 ;t3 = x3 % y3)

{

k = x3/y3;

T2 = x2-k * y2;

t 1 = x 1-k * y 1;

x 1 = y 1;

x 1 = y2;

x3 = y3

y 1 = t 1;

y2 = t2

y3 = t3

}

if( y3 == 1)

{

//有乘法逆运算

ar = y2

br = x 1;

返回1;

}否则{

//公约数不是1,没有乘法逆。

ar = 0;

br = 0;

返回y3;

}

}

扩展的欧几里德算法在计算最大公约数上与普通欧几里德算法一致。计算乘法的逆元很难理解。我花了半个小时想办法证明他。

首先,重复一下我在《可分性》一书中的一个论断:

如果gcd(a,b)=d,则有m,n,所以d = ma+nb。称这个关系为a,b组合整数D,m,n为组合系数。当d=1时,有ma+nb = 1。此时可以看出,M是模A的乘法逆,N是模B的乘法逆..

为了证明上述结论,我们把上述计算中的和易作为ti的迭代初值,考察一组数(t1,t2,t3)。归纳证明,用扩展的欧几里德算法计算后,每行满足a×t1+b×t2 = t3。

第一行:1 × a+0 × b = a成立。

第2行:0 × a+1 × b = b成立。

假设前k线全部为真,检查第k+1行。

对于线路k-1和线路K,有

t 1(k-1)T2(k-1)T3(k-1)

t1(k) t2(k) t3(k)

单独见面:

t 1(k-1)×a+T2(k-1)×b = T3(k-1)

t1(k) × a + t2(k) × b = t3(k)

根据扩展的欧几里德算法,假设T3 (k-1) = JT3 (k)+R。

然后:

t3(k+1) = r

T2(k+1)= T2(k-1)-j×T2(k)

t 1(k+1)= t 1(k-1)-j×t 1(k)

规则

t 1(k+1)×a+T2(k+1)×b

= t 1(k-1)×a-j×t 1(k)×a+

t2(k-1) × b - j × t2(k) × b

= t3(k-1) - j t3(k) = r

= t3(k+1)

获得证书

所以最后t3迭代计算到1时,就有t1× a+t2 × b = 1。显然,t1是模A的乘法逆,t2是模B的乘法逆..