小凯的疑惑
本人的第二篇博客,嗷嗷嗷!二话不说,来挑战下!
神奇传送门:
神奇的思路:
首先看到这道题,我真的无从下手。只能想到暴力枚举。然后。。。(不堪回首的往日啊)就没有然后了。手推几个数据点,很容易发现每个答案都小于两个质数的积,然后试了下a*b-a-b,。。。成功了所以代码如下。
神奇的题解
#include<iostream> #include<cstdio> using namespace std; int main() { long long a,b; cin>>a>>b; cout<<a*b-a-b; return 0; }
解释
问了某个大佬,他告诉我题目可转换为:设a,b,c是正整数,求c0的最小值能够让任意的c>c0,方程ax+by=c有负整数解;
解出来就是c0的最小值=ab-a-b.
证明
因为a,b互质。可将原方程转化为a(x0+bt)+b(y0-at)=c,t为系数,方程仍然成立。考虑x的范围,首先x>=0,其次若x=0时,c0就可以无限大。x=b时,a与y可以合并,同样c0无限大。倘若x>b,可以从x中拆个b同样转化成a,y合并
再加上一个数,c0同样可以取到无限大。所以x的取值范围为:0——b-1。所以by=c-ax>ab-a-b-ax>=ab-a-b-a(b-1)=-b,所以y>=-1。于是问题就简化到证明:c>ab-a-b都可以,而c=ab-a-b不可以。当c=ab-a-b时,ax+by=ab-
a-b => ab=a(x+1)+b(y+1).因为a与b互质,a|(y+1),b|(x+1).所以a<=y+1,b<=x+1.
所以ab=a(x+1)+b(y+1)>=ab+a=2ab<=0,
方程无解,矛盾。所以c!=ab-a-b。证毕!