有關貝祖定理的一個小問題


有關貝祖定理的一個小問題

 

所謂貝祖定理是說:

兩個整數 a是互質的。等價於方程 ax+by=1有整數解。

當然。 貝祖定理另一種更一般的形式,說的是兩個整數 ab有最大公因數是c,等價於方程 ax+by=c有整數解。

這兩種表述事實上是等價的。由於對另外一種形式略微一變形就得到了:


所以我們僅僅須要考慮第一種形式的貝祖定理就能夠了。

貝祖定理的證明

貝祖定理的證明並不復雜。只是由於不管是中學還是大學(除了數學專業)都非常少討論這類跟數論相關的問題,所以可能有些人會感覺這個問題有些無從下手。

這里先給個貝祖定理的簡單證明。

 

首先,很easy就能夠證明a假設不互質。那么 ax+by=1無整數解。因此我們僅僅須要考慮a是互質的這樣的情況。

 

xy取不同整數值時。ax+by 也會有不同的結果,這些結果中最小的那個正整數設為s,也就是

ax+by=s

a整除的商為q,余數為r。也就是

 

那么


如果 不等於0就與我們如果sax+by這個集合的最小的正整數矛盾了。所以r僅僅能等於0,也就是說a能夠整除s。同理也能夠證明b能夠整除s。這說明sab的公約數,而我們知道ab是互質的,所以s僅僅能等於1。這就證明了貝祖定理。

 

xy的計算

怎樣計算xy的值是還有一個問題,當然我們知道xy有無數多組整數解。我們僅僅須要求出一組解就夠了。

不失一般性,我們設 a > ba = bq+r

 

 能夠看到。我們將 ax+by=1轉化為 ax+by'=1當中da要小。這個過程能夠一直反復,直到當中一個整數等於1

方程變類似形式:

ex+y=1

這時僅僅要讓x=0y=1 就能夠了。然后一步步回帶,就能求得最初的xy了。

這是一個典型的遞歸的過程。

 以下給個C語言實現的代碼。代碼比較簡單,就沒有加入凝視:

bool Bezout(int a, int b, int *px, int *py)
{
    int q, r;
    int x, y;
    bool ok;
    if( a == 1 )
    {
        *px = 1;
        *py = 0;
        return true;
    }
    if( b == 1 )
    {
        *px = 0;
        *py = 1;
        return true;
    }

    if( a >= b )
    {
        q = a / b;
        r = a % b;
        if ( r == 0 )
        {
            return false;
        }
        ok = Bezout(r, b, &x, &y);
        if( ok )
        {
            *px = x;
            *py = y - q * x;
        }
        return ok;
    }
    else
    {
        q = b / a;
        r = b % a;
        if ( r == 0 )
        {
            return false;
        }
        ok = Bezout(a, r, &x, &y);
        if( ok )
        {
            *py = y;
            *px = x - q * y;
        }
        return ok;
    }
    return true;
}

這里是測試用例:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

bool Bezout(int a, int b, int *px, int *py);
int main()
{
    int x, y;
    int a = 73;
    int b = 32;
    bool ok;

    ok = Bezout(a, b, &x, &y);
    if(ok)
    {
        printf("%d * %d + %d * %d = %d, is ok\n", a, x, b, y, a * x + b * y);
    }

    return 0;
}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM