辗转相除法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验十辗转相除法

[实验目的]

1. 学习用辗转相除法求最大公约数和最大公因式;

2. 求最简单是不定方程

§1基本理论

1.1 初等数论的基本理论

定义10.1 任给两个整数a,b,其中b≠0, 如果存在一个整数q使得等式 a=bq 成立,则称b整除a,记作b|a 。此时称b为a的约数,a为b的倍数。

定理10.2 设a,b是两个整数,其中b>0,则存在唯一的整数q及r,使得a=bq+r,0≤r

定义10.3 设a1,a2,…,a n 是n个不全为零的整数,若整数d是它们之中每一个数的约数,那么d就叫a1,a2,…,a n一个公约数,整数a1,a2,…,a n的公约数中最大的一个叫最大公约数,记作(a1,a2,…,a n),若(a1,a2,…,a n)=1,则称a1,a2,…,a n 互素。

定理10.4 若a|bc,(a,b)=1,则a|c.

定理10.5 (a1,a2,…,a n)=((a1,a2,…,a n-1)a n).

1.2 多项式的基本理论

定义10.6 形如f(x)=a n x n+a n-1x n-1+…+a1x+a0(a n,a n-1,…a1,a0为实数a n≠0)的函数称为实系数多项式,整数n称为该多项式的次数,记作deg(f(x)).对于零多项式,一般不定义其次数。

定理10.7 设f(x)与g(x)是两个实系数多项式,存在唯一的多项式q(x)与r(x)使得f(x)= g(x) q(x),则称g(x)整除f(x)。记为g(x) |f(x),称g(x)为f(x)的因式,f(x)为g(x)的倍式。

定义10.9 设f(x)与g(x)是两个实系数多项式,若实系数多项式h(x)满足h(x) |f(x), h(x) |g(x),则称h(x)为f(x)与g(x)的公因式。若d(x)为f(x)与g(x)的公因式,且d(x)为f(x)与g(x)的任一公因式的倍式,则称d(x)为f(x)与g(x)的最大公因式,

§2实验内容与练习

2.1整数的辗转相除法

练习1 用枚举法计算(81,42),(72,95),(1397,2413)。

在中国古代就有一个很好的算法来计算a,b的最大公约数(a,b),称为辗转相除法,在西方称为Euclid算法。下面通过计算(1397,2413)来阐述这一算法。

首先,我们用这两个数1397和2413中两个数中小的去除大的,得商为1,余数为1016。将原来两个数中大的2413扔掉,将1397作为大数,将余数1016作为新的小数。

重复上面的过程:用1016去除1397,得商为2,余数为245。扔掉1397,将381作为除数,1016作为小的。用381去除1016,得商为2余数为254,扔掉1016,用254 去除381,得商为1 ,余数为127,再扔掉381,用127去除254,发现能整除,于是127就是最大公约数。整个计算过程为:

2413=1397*1+1016,

1397=1016*1+381,

1016=381*2+254,

381=254*1+127,

254=127*2+0,

所以(1397,2413)=127。

为什么这样求出是就是最大公约数呢?下面对a,b为正整数(a>b)的情形给出说明。

根据定理10.2,商q和余r数满足

a=bq+r,且0≤r ≤b-1.

若r=0,显然(a,b)=b;若r≠0,由于a=bq+r,每个能整除b,r的整数都能整除a,当然能同时整除a,b,所以(b,r)|(a,b);另一方面,r=a-bq,每个能整除a,b的整数都能整除r, 当然能同时整除b,r, 所以(a,b)|(b,r).因此(a,b)=(b,r). 辗转相除法进行一步后,b 取代原来的a,用r取代原来的b,最大公约数保持不变,因此我们的算法可以一直进行下去:

a=bq1+r1,

b=r1q2+r2,

r1=r2q3+r3,

r k-3=r k-2q k-1+r k-1,

r k-2=r k-1q k.

一旦出现r k-2=r k-1q k(即r k=0),则有

r k-1=(r k-2,r k-1)=…=(r1,r2)=(b,r1)=(a,b).

上述的求最大公约数的方法就称为辗转相除法。在Mathematica软件中可用Mod(a,b)来求a 除以b的余数。我们可以用下面的程序来实现辗转相除法:

f[a_,b_]:=Module[{step=0,p=a,q=b,r},

If[p

While[q!=0,

R=q;

q=Mod[p,q];

p=r;

step=step+1

];

Return[{p,step}]

]

在上述程序中,对给定的两个正整数a,b,f[a,b]给出一个数组{p,step},其中p表示两个数的最大公约数,step用来记录辗转相除法计算的步数。

练习2 用上述程序计算(81,42),(72,95),(1397,2413)。

那么,上述计算过程会不会无限进行下去呢?

由上述计算方法有b> r1> r2…,所以余数是严格递减的,从而会在有限次终止。而且算法的步数不大于b,因为余数序列的最差情景为b-1,b-2,…1,0.

上面我们给出的步数的估计是b,实际上步数是多少呢?

对任意给出的正整数a,b,下面研究辗转相除法的步数。如下的程序给出104

Clear[step,r,u,t,p,q];

n=4;p=10^(n+1);

m=1000

t:=Random[Integer,{p,q}];

相关文档
最新文档