欧几里得算法

1.最大公约数

设: gcd(a, b)=k g c d ( a ,   b ) = k

a=kc, b=kdcN,dN a = k c ,   b = k d ( c ∈ N ∗ , d ∈ N ∗ )

cdcd1c>d ∴ c 、 d 互 质 ( c 、 d 的 公 约 数 只 有 1 ) 且 c > d

ab=k(cd) ∴ a − b = k ( c − d )

gcd(b, ab)=gcd(kd, k(cd)) ∴ g c d ( b ,   a − b ) = g c d ( k d ,   k ( c − d ) )

假设 d、(c - d)不互质
d|(cd) d | ( c − d )
∴ 设 cd=kd c − d = k ′ d
c=d(k+1) c = d ( k ′ + 1 )
与题设“c、d互质”不符,
∴ d与(c - d)互质

gcd(kd, k(cd))=k ∴ g c d ( k d ,   k ( c − d ) ) = k

gcd(a, b)=gcd(b, ab) ∴ g c d ( a ,   b ) = g c d ( b ,   a − b )

gcd(a, b)=gcd(b, a % b) ∴ g c d ( a ,   b ) = g c d ( b ,   a   %   b )


2.ax + by = gcd(a, b)

ax+by=gcd(a, b) a x + b y = g c d ( a ,   b )

             =gcd(b, a % b)                           = g c d ( b ,   a   %   b )

             =bx+(a % b)y                           = b x ′ + ( a   %   b ) y ′

             =bx+(a[a/b]b)y                           = b x ′ + ( a − [ a / b ] ∗ b ) y ′

             =bx+ay[a/b]by                           = b x ′ + a y ′ − [ a / b ] ∗ b y ′

             =ay+b(x[a/b]y)                           = a y ′ + b ( x ′ − [ a / b ] ∗ y ′ )

x=y, y=x[a/b]y ∴ x = y ′ ,   y = x ′ − [ a / b ] ∗ y ′

终止条件:
b=0 b = 0 时: a1+b0=a a ∗ 1 + b ∗ 0 = a
x=1, y=0 x = 1 ,   y = 0
递归求解


3. ax + by = c

用扩展欧几里得先求出 ax+by=gcd(a, b) a x ′ + b y ′ = g c d ( a ,   b ) 的一组解, x’, y’及gcd(a, b)的值

c mod gcd(a, b)0 c   m o d   g c d ( a ,   b ) ≠ 0
方程无解(整数范围内)

令:

c=gcd(a, b)k c = g c d ( a ,   b ) ∗ k

k=c/gcd(a, b) ∴ k = c / g c d ( a ,   b )

ax+by=c ∴ a x + b y = c

                =kgcd(a, b)                                 = k ∗ g c d ( a ,   b )

ax+by=akx+bky ∴ a x + b y = a k x ′ + b k y ′

ax=akx,by=bky ∴ a x = a k x ′ , b y = b k y ′

a!=0b!=0 ∵ a ! = 0 且 b ! = 0

x=kx,y=ky ∴ x = k x ′ , y = k y ′

k=c/gcd(a, b) ∵ k = c / g c d ( a ,   b )

x=xc/gcd(a, b) ∴ x = x ′ ∗ c / g c d ( a ,   b )

   y=yc/gcd(a, b)       y = y ′ ∗ c / g c d ( a ,   b )


4. x的非负最小值

用扩展欧几里得先求出 ax+by=gcd(a, b) a x ′ + b y ′ = g c d ( a ,   b ) 的一组解,
x x ′ , y y ′ gcd(a, b) g c d ( a ,   b ) 的值

lcm(a, b)=ab/gcd(a, b) l c m ( a ,   b ) = a ∗ b / g c d ( a ,   b )

ax+lcm(a, b)+bylcm(a, b)=c a x + l c m ( a ,   b ) + b y − l c m ( a ,   b ) = c

ax+ab/gcd(a, b)+byab/gcd(a, b)=c a x + a ∗ b / g c d ( a ,   b ) + b y − a ∗ b / g c d ( a ,   b ) = c

a(x+b/gcd(a, b))+b(ya/gcd(a, b))=c a ( x + b / g c d ( a ,   b ) ) + b ( y − a / g c d ( a ,   b ) ) = c

x + + 任意倍数的 b/gcd(a, b) b / g c d ( a ,   b ) 均有对应的y的整数解

t=b/gcd(a, b) 设 t = b / g c d ( a ,   b )

x=((xc/gcd(a, b)) % t+t) % t x = ( ( x ′ ∗ c / g c d ( a ,   b ) )   %   t + t )   %   t 为方程的最小非负解.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值