原题:
小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有 无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小 凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在 小凯无法准确支付的商品。
a,b<=10^9
结论题,记得我当时在现场大力打表做出来了
听说好像还是小学奥数题
不过数论推结论不难
由裴蜀定理及其引理,因为gcd(a,b)=1,所以对于任意整数c,都存在整数x和y满足ax+by=c
既然丢番图方程有解,为什么还会存在不能支付的价格?
因为丢番图方程允许有负解,但是支付的时候不能付负数的钞票(那样大概算找钱吧)
所以目标转化为,寻找最大的整数c,使得不存在非零整数x和y,满足ax+by=c
联想到解丢番图方程时对于负解向正解的转化
丢番图方程存在通解:x0+k*(b/d),y0-k*(a/d),其中d=gcd(a,b)
那么可以发现存在C使得当c>C时方程有正整数解的原因
因为当c很大,x0就可以很大,那么即使y0是负值,也能通过让x0减少,y0增加的方式调整,使得x0和y0都是赋值
这启发我们找到一个思路:对于一个正整数x0,检查所有不能通过调整来达到整数的y0的特点
因为d=1,所以方程的通解实际为x0-k*b,y0+k*a
x0在保证自身不为负的情况下最多给y0提供⌊x0/b⌋*a
当y0+⌊x0/b⌋*a<0,也就是y0<-⌊x0/b⌋*a时,a*x0+b*y0=c没有正整数解
则c<=a*x0+b*(-⌊x0/b⌋*a-1)=a*x0-a*b*⌊x0/b⌋-b=a*(x0-b*⌊x0/b⌋)-b=a*(x0%b)-b
由于x0是任意正整数,所以x0%b的最大值为b-1
所以c的最大值为a*(b-1)-b=a*b-a-b
代码就两行,不贴了