数论初步———扩展欧几里德算法

问题引入:直线上的点
求直线 ax a x + by b y + c = 0上有多少个整数点(x,y)满足 x x ϵ [ x1 x 1 x2 x 2 ], y y ϵ [ y1 y 1 y2 y 2 ]。
分析:
在解决这个问题之前,首先学习扩展欧几里德算法——找一对整数 xy ( x , y ) ,使得 ax+by a x + b y = gcdab g c d ( a , b )
注意这里的 xy x 和 y 不一定是正数,也可能是负数或者是0,。例如, gcd615 g c d ( 6 , 15 ) = 3,6*3 - 15*1 = 3,其中 x x = 3,y = 1。这个方程还有其他解,如 x x = - 2,y = 1。
下面是扩展欧几里德算法的程序:

void ext_gcd(int a, int b, int &d, int &x, int &y)
{
    if(!b) {d = a;x = 1; y = 0;}
    else {ext_gcd(b,a%b,d,y,x);y -= x*(a/b);}
}

证明

(证明过程参考自百度百科)

原式: ax+by=gcd(a,b) a x + b y = g c d ( a , b ) (假设a≥b)

b=0 b = 0 时有 gcd(a,b)=a g c d ( a , b ) = a ,此时 x=1y=0 x = 1 , y = 0
b0 b ≠ 0 时,根据欧几里得定理 gcd(a,b)=gcd(b,a g c d ( a , b ) = g c d ( b , a % b) b ) 可得 ax+by=gcd(a,b)=gcd(b,a a x + b y = g c d ( a , b ) = g c d ( b , a % b)=bx+(a b ) = b x ′ + ( a % b)y b ) y ′ ,即 ax+by=bx+(a a x + b y = b x ′ + ( a % b)y=bx+(aba/b)y b ) y ′ = b x ′ + ( a − b ∗ ⌊ a / b ⌋ ) y ′

移项得
ax+by=bx+(a a x + b y = b x ′ + ( a % b)y=ay+b(xa/by) b ) y ′ = a y ′ + b ( x ′ − ⌊ a / b ⌋ y ′ )

根据恒等定理,有

{x=yy=xa/by { x = y ′ y = x ′ − ⌊ a / b ⌋ y ′

证毕
上面求出 ax+by=gcd(a,b) a x + b y = g c d ( a , b ) 的一组解 x0y0 ( x 0 , y 0 ) ,那么其他解呢?
任取另外一组解 xy ( x , y ) ,则 ax0+by0=ax+by a x 0 + b y 0 = a x + b y (他们都等于 gcdab g c d ( a , b ) );
变形得: ax0x=by0y a ( x 0 − x ) = b ( y 0 − y )
假设 gcdab=g g c d ( a , b ) = g
方程左右同时除以g,得: ax0x=by0y a ′ ( x 0 − x ) = b ′ ( y 0 − y )
其中 a=ag a ′ = a g b=bg b ′ = b g
这里 a a ′ b b ′ 互素,因此 x0x x 0 − x 一定是 b b ′ 的倍数, y0y y 0 − y 一定是 a a ′ 的倍数;
x0x=kb x 0 − x = k b ′
yy0=ka y − y 0 = k a ′
所以得出结论:

假设a,b,c为任意整数。若方程 ax+by=c a x + b y = c 的一组解为 x0y0 ( x 0 , y 0 ) ,则它的任意常数解都可以写成 x0+kby0ka ( x 0 + k b ′ , y 0 − k a ′ ) ,其中 a=agcdab a ′ = a g c d ( a , b ) b=bgcdab b ′ = b g c d ( a , b ) k k 取任意整数。
c g g 的倍数时ax+by=c的一组解是 x0cgy0cg ( x 0 c g , y 0 c g ) ;
c c 不是是g的倍数时无整数解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值