(數論)設自然數a,b互質,則不能表示成ax+by(x,y爲非負整數)的最大整數是ab - a - b

借鑑題目:【藍橋杯】買不到的題目
該題目有兩個方法:
1.數論:設自然數a,b互質,則不能表示成ax+by(x,y爲非負整數)的最大整數是ab - a - b
證明:
a或者b是1的情況下容易證明。
以下情況都是a>1且b>1的情況。
首先證明ab-a-b不能表示成ax+by
假設ab-a-b=ax+by,那麼ab=am+bn (m,n都大於等於1)
左邊是a的倍數,右邊am是a的倍數,那麼要求bn也要是a的倍數
b不是a的倍數,只能要求n是a的倍數,這樣的話,bn=b(n*a)>=ba
那麼am=ab-bn所以am<=0與m>1矛盾。
接着證明ab-a-b+i能表示成ax+by(i>0)
因爲ab互質,最大公約數就是1,根據費蜀(Bezout)定理的方法知ma+nb=1,
不妨假設m>0,n<0,於是ab-a-b+i=ab-a-b+i(ma+nb)
因爲m>1(m=0意味着nb=1不可能的),所以ab-a-b+i(ma+nb)=(im-1)a+(a+in-1)b
im-1>0,現在只要證明a+in-1>=0,因爲ima+inb=i
如果,|in|>ja其中j>0,那麼ima=i+|in|b>jab,所以im>jb
所以ima+inb=(im-jb)a-(|in|-ja)b=i,說明|in|>ja時,我們就能調整im,in使得|in|<a
因此|in|<=a-1, 所以a+in-1>=0於是得證

拓展:
費蜀(Bezout)定理:若有整數a、b和其最大公因子d,必存在整數x、y使得:
ax + by = d (證明請點擊

2.該最大整數的範圍 a + b - 1 <= x < < lcm(a, b) (最小公倍數)
證明:
設 t >= a * gcd(a, b) / b 那麼 tb >= a * gcd(a, b) = ax + by (x, y大於等於零)

代碼:

#include <cstdio>
using namespace std;
int main() {
    int n, m;
    while (~scanf("%d %d", &n, &m)) {
        printf("%d\n", n * m - n - m);
    }
    return 0;
}

參考鏈接:https://zhidao.baidu.com/question/305250238.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章