1. 程式人生 > >【NOIP2017】小凱的疑惑

【NOIP2017】小凱的疑惑

1-1 display 技術分享 一個 大整數 gif 而且 splay targe

本題在洛谷上的鏈接:https://www.luogu.org/problemnew/show/P3951#sub


這是去年復賽第一題,小凱的疑惑?我的疑惑?我的疑惑就是為什麽我去年初賽掛了?!後天就是今年的初賽了,希望能過。。。(哭)

關於這道題的各種吐槽不再多說,有興趣可以自行去看看其他地方。這裏正兒八經解決一下小凱的疑惑。

實際上這是道小學奧數題,答案是ab-a-b,怎麽想出來的,我是不知道,但可以驗證這是對的。而且我看到有個地方稱這是賽瓦維斯特定理(已知a,b為大於1的正整數,gcd(a,b)=1,則使不定方程ax+by=c無負整數解的最大整數c=a*b-a-b)。

接下來進入證明環節。首先要證明ab-a-b不可以被pa+qb所表示,我們利用反證法,假設ab-a-b=pa+qb。

則有ab=(p+1)a+(q+1)b,因為gcd(a,b)=1,那麽a|(p+1),b|(q+1),不妨設p+1=k1a,q+1=k2b,可以得出k1+k2=1。而k1a=p+1>=1,所以k1>=1,同理k2>=1,推出矛盾,所以假設不成立,ab-a-b不可以表示成pa+qb。

接下來要證明對於任意c>=ab-a-b,c都可以表示pa+qb的形式。

顯然,有c>=ab-a-b+1,c+a+b>=ab+1,不妨設c+a+b=ka+m,k>=b,1<=m<=a-1,若m等於a其實就相當於k=b+1。

暫時轉化一下視角,我們來考慮ax+by=m這個不定方程,因為gcd(a,b)=1,所以一定有解。根據二元一次不定方程的性質,若存在一個特解x0,那麽x0

+kb/gcd(a,b)也一定是解。

所以一定存在b-1<=x1<=-1使得方程成立,因為x1的取值是連續的b-1個。因為ax1<0,b>0,m>0,所以y1>=1。

取x=k+x1-1,y=y1-1,可知x>=0,y>=0。此時ax+by=kx+ax1-a+y1b-b,因為ax1+by1=m,那麽ax+by=kx+m-a-b,我們發現他剛好等於c。因此得出結論對於任意c>=ab-a-b,一定可以表示成ax+by的形式(當然x>0且y>0)。

這道題難在理解答案而不在正確通過。

技術分享圖片
 1 #include <iostream>
 2
3 using namespace std; 4 5 typedef long long ll; 6 7 int main() { 8 ll a, b; 9 cin >> a >> b; 10 cout << a * b - a - b; 11 return 0; 12 }
AC代碼

【NOIP2017】小凱的疑惑