拓展欧几里得算法的多解

写在前面:

  这篇博客是我在[◹]对 算术基本定理 的研究 中的一部分

by pixelkitties

  • 拓展欧几里得算法的多解

  []拓展欧几里得算法

  拓展欧几里德算法是用来在已知a,b的情况下求解一组p,q,使它们满足[◹]Bézout恒等式: pa+qb = gcd(a, b) ==d

——bia度百科


  求解得到的是一组p,q,是任意的一组p,q吗?

  p,q肯定不止一对,那么如何获得多对p,q呢?

 

  是否为随意的一组解先存疑

  但能肯定的是,得到的不一定是最小整数解

 

  如wikipedia上的例子:

 

  想要求得多解也很容易:

    设gcd(a,b) == d

    ∵p*a + q*b == d

    ∴p*a + q*b + n*a*(b/d) - n*(a/d)*b == d

    ∴(p + n*(b/d) )*a + (q - n*(a/d) )*b == d

注意,n不为0时,上下红色部分不相等

注意,此处除去gcd(a,b)是为了得到所有解

  即任意一组解满足:

(p+n*(b/d) )(q-n*(a/d) )

(d == gcd(a,b) )

  显然,对于任意的n∈Z都成立

  利用这个性质就能求出所有解了!

此处p,q为利用拓展欧几里得算法得到的一组p,q

  那么如何求得p或q的最小整数解呢?

  其实同理:

    p*a + q*b == gcd(a, b)

    (p' + n*b)*a + (q' - n*a)*b == gcd(a, b)

  则p%b,q%a就好了

注意,n不为0时,上下红色部分不相等

 

  还有以下情况:

  希望在MOD gcd(a,b)的意义下,希望得到最小的一组非负整数解

  即求得最小的p,q∈Z*,使得p*a + q*b ≡ 0 (MOD gcd(a,b) )

  但是p或q有可能为负数啊?

((p%b)+b)%b((q%a)+a)%a

  这样就能保证是正整数了!

 

posted @ 2018-12-11 23:59  Antigonae  阅读(559)  评论(0编辑  收藏  举报