【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
代码就两行,不贴了
【NOIP2017】小凯的疑惑的更多相关文章
- 【比赛】NOIP2017 小凯的疑惑
找规律:ans=a*b-a-b 证明:(可见 体系知识) gcd(A, B) = 1 → lcm(A, B) = AB 剩余类,把所有整数划分成m个等价类,每个等价类由相互同余的整数组成 任何数分成m ...
- 联赛膜你测试20 T1 Simple 题解 && NOIP2017 小凯的疑惑 题解(赛瓦维斯特定理)
前言: 数学题,对于我这种菜B还是需要多磨啊 Simple 首先它问不是好数的数量,可以转化为用总数量减去是好数的数量. 求"好数"的数量: 由裴蜀定理得,如果某个数\(i\)不能 ...
- NOIP2017 小凯的疑惑
题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...
- NOIP2017 小凯的疑惑 解题报告(赛瓦维斯特定理)
题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...
- 题解【洛谷P3951】[NOIP2017]小凯的疑惑
题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...
- luogu2951 noip2017 小凯的疑惑
在考场上我们可以打表发现规律是 $ ab-a-b $ .下面给出证明(看的网上的). 若有正数 $ x $ 不能被 $ a $ , $ b $ 组合出,假设 $ a>b $ ,则存在 \[ x= ...
- luogu 3951 小凯的疑惑
noip2017 D1T1 小凯的疑惑 某zz选手没有看出这道结论题,同时写出了exgcd却不会用,只能打一个哈希表骗了30分 题目大意: 两个互质的正整数a和b,求一个最小的正整数使这个数无法表示为 ...
- Luogu [P3951] 小凯的疑惑
题目详见:[P3951]小凯的疑惑 首先说明:此题为一道提高组的题.但其实代码并没有提高组的水平.主要考的是我们的推断能力,以及看到题后的分析能力. 分析如下: 证明当k>ab-a-b时,小凯可 ...
- NOIP 2017 小凯的疑惑
# NOIP 2017 小凯的疑惑 思路 a,b 互质 求最大不能表示出来的数k 则k与 a,b 互质 这里有一个结论:(网上有证明)不过我是打表找的规律 若 x,y(设x<y) 互质 则 : ...
- 2017提高组D1T1 洛谷P3951 小凯的疑惑
洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...
随机推荐
- C#大文件流式压缩加解密
* * , CancellationToken token=default) { try { FileStream zipStream = new FileStream(writeFile, File ...
- 这可能是你少有的能get到测试用例编写精髓的机会!
自动化测试用例的编写是实现项目自动化的核心,合理的用例设计是保证自动化效益和实用性的关键,也直接决定了自动化脚本是否具备可扩展和可维护性.由此,本篇文章主要为大家介绍了测试用例编写的规范和注意事项. ...
- mybatis 基于xml 配置的映射器
cache 给命名空间的缓存配置 cache-ref 其他命名空间缓存配置的引用 resultMap 描述如何从数据库结果集中来加载对象 <!--column不做限制,可以为任意表的字段,而p ...
- 关于字符串中每个单词的首字母大写化问题之 拆分split(/\s+/)
var a = 'Hi, my name\'s Han Meimei, a SOFTWARE engineer'; //for循环 function titleCase(s) { var i, ss ...
- linux下安装mysql5.7方法与常见问题
linux上安装mysql5.7 1.下载tar包,这里使用wget从官网下载 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7 ...
- 多线程基础知识---join方法
join方法的作用 thread.join()方法用于把指定的线程加入到当前线程中,把当前线程的CPU执行时间让给另一个线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继 ...
- 添加SSH keys到github帐号
使用git clone命令从github上同步github上的代码库时,如果使用SSH链接(如我自己的esesgrid项目:git@github.com:hmilycc/esesgrid.git),而 ...
- struts框架之环境搭建(一)
一.首先,我们需要做一些准备工作: 1.1. 下载struts:https://struts.apache.org/download.cgi#struts2520 1.2. 下载tomcat:ht ...
- java8 用法小结
一 简单的stream parallelStream慎用,除非你知道它内部干了什么 List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, ...
- (一)C++入门——指针与数组——Expression: _CrtIsValidHeapPointer(Block)
最近在入门c++,在看<c++ Primer Plus>一书.书中P106提到,删除使用New创建的数组时,是将指针重新指到第一个元素后,再进行的删除操作.代码如下: int *ptest ...