线性同余方程

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

利用扩展的欧几里德算法,计算(a, b)和满足d = (a, b) = ax0 + by0的x0和y0, 也就是求出了满足a'x0 + b'y0 = 1的一组整数解。 因此可得: x = n/d * x0 + b/d * t y = n/d * y0 - a/d * t (t是整数) a( n/d * x0 + b/d * t) +b( n/d * y0 - a/d * t ) =an/d*x0+ab/d*t+bn/d*y0ab/d*t=n(a/d*x0+b/d*y0)=n(a'x0 + b'y0 )=n
如何求 ax'+by'=1 的一组解? 设 a>b>0, (a mod b)X.+by.=1 则 (a mod b)x.+(a div b)bx.-(a div b)bx.+by. =[a mod b+ (a div b)*b]x.+[by.- (a div b)bx.] =ax.+b[y.-(a div b)x.] =1 故 ax'+by'=1 有一组解 x'=x. y'=y.-(a div b)x. 对于 ax'+by'=1 若 b>a>0 将x'与y'互换可得 若 ay.+(b mod a)x.=1 则 ay'+bx'=1 有一组解 x'=x. y'=y.-(b div a)x. 将x'与y'互换回来得 ax'+by'=1 当 b>a>0 时 有一组解 x'=x.-(b div a)y. y'=y'
同理
递归求解
{=== 求解模线性方程 ax ≡ n (mod b) 其中n>0 ===} procedure modular_linear_equation_solver(a,b,n:longint); var d,x,y,e,i:longint; begin d:=extended_euclid(a,n,x,y); if n mod d>0 then writeln('No answer!') {输出无解信息} else begin
{=== 扩展的欧几里德算法,求出gcd(a,b)和满足gcd(a,b)=ax+by的整数x和y ===}
Байду номын сангаасfunction extended_euclid(a,b:longint;var x,y:longint):longint; var t:longint; begin if b=0 then begin result:=a; x:=1; y:=0; end else begin result:=extended_euclid(b,a mod b,x,y); t:=x; x:=y; y:=t-(a div b)*y; end; end;
有等式ax+by=c,已知a、b、 c,求x和y。 (a、b、c、x、 y都是整数)
不定方程ax + by = n的步骤如下:
(1)计算gcd(a, b). 若gcd(a, b)不能整除n,则方程无整数 解;否则,在方程的两边同除以gcd(a, b), 得到新的不定方程a‘x + b’y = n‘,此时gcd(a’, b‘) = 1 (2)求出不定方程a’x + b‘y = 1的一组整数解x0, y0,则 n’x0,n‘y0是方程a’x + b‘y = n’的一组整数解。 (3)根据拓展欧几里得算法,可得方程a'x + b'y = n'的所 有整数解为: x = n'x0 + b't y = n'y0 - a't (t为整数) 这也就是方程ax + by = n的所有整数解
e:=x*(n div d) mod n; for i:=0 to d-1 do writeln( (e+i*(n div d)) mod n ); {输出第i个解 } end; end;
pascal语言的程序: ==========================================================
相关文档
最新文档