zoukankan      html  css  js  c++  java
  • 【NOIP2017】小凯的疑惑

    原题:

    小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有 无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小 凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在 小凯无法准确支付的商品。

    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

    代码就两行,不贴了

  • 相关阅读:
    导入Spreadsheet到sharepoint2013报错
    WinRM不起作用 Connecting to remote server failed with the following error message : WinRM cannot complete the operation
    安装workflowmanager 1.0 server
    SharePoint 2013 pre-config
    SharePoint 错误集 3
    如何安装/卸载workflow manager 1.0
    IOS 7 Study
    IOS 7 Study
    MVC interview questions with answers
    Android 获取控件相对于屏幕位置
  • 原文地址:https://www.cnblogs.com/cdcq/p/11619920.html
Copyright © 2011-2022 走看看