【NOIP2017】小凯的疑惑

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


 

简化一下问题,就是对于ax+by=c,求一个最大的c,使得方程不存在非负整数解。

我们设有一组特解(x0,y0),那么根据此类直线方程的性质,则通解可表示为(x0-kb,y0+ka)。

显然,存在一组特解(x1,y1),使得0<=x1<=b-1,我们试图研究那些不存在非负整数解的情况,所以设y1<=-1。

此时,c=ax1+by1<=a(b-1)+b(-1)=ab-a-b,说明所有无非负整数解情况的c必然不超过ab-a-b,但我们还需要证明当c=ab-a-b时无非负整数解。

直接用反证法即可。设c=ab-a-b时有非负整数解,则ax+by=ab-a-b,a(x+1)+b(y+1)=ab。

因为a,b互质,所以有a|y+1,b|x+1,故y+1>=a,x+1>=b,则a(x+1)+b(y+1)>=2ab,显然矛盾,故当c=ab-a-b时无非负整数解。

 

 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代码

 

posted @ 2018-10-11 20:05  Mr^Kevin  阅读(334)  评论(0编辑  收藏  举报