洛谷P3951 小凯的疑惑

虽然答案一眼就能看出来,但是答案的证明还是比较有趣的


[NOIP2017 提高组] 小凯的疑惑 / [蓝桥杯 2013 省] 买不到的数目

题目背景

NOIP2017 提高组 D1T1

题目描述

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

输入格式

两个正整数 a 和 b,它们之间用一个空格隔开,表示小凯中金币的面值。

输出格式

一个正整数 N,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。

样例 #1

样例输入 #1

1
3 7

样例输出 #1

1
11

提示

【输入输出样例 1 说明】

小凯手中有面值为 3 和 7 的金币无数个,在不找零的前提下无法准确支付价值为 1, 2, 4, 5, 8, 11 的物品,其中最贵的物品价值为 11,比 11 贵的物品都能买到,比如:

12 = 3 × 4 + 7 × 0;

13 = 3 × 2 + 7 × 1;

14 = 3 × 0 + 7 × 2;

。

【数据范围与约定】

对于 30% 的数据: 。

对于 60% 的数据: 。

对于 的数据:。

解

a, b 是对称的,答案应该也是跟 a, b 对称的一个式子,先猜 a + b ,发现不是,然后换 a ⋅ b ,大了,发现 (a−1)(b−1) 正好是答案

于是猜测答案是 (a−1)(b−1) ,打个表发现还真是,就可以交了XD

证明

原题就是要找不满足 ax + by = c(x,y≥0) 的最大 c

首先 a, b 是互素的,所以 c ≡ ax mod  b(a=0,1,2,...,b−1) 是互不同余的(遍历了模 b 的完系)

所以可以知道以下的数是可以表示的:

  • c ≥ 0 且 c ≡ 0 mod  b
  • c ≥ a 且 c ≡ a mod  b
  • c ≥ 2a 且 c ≡ 2a mod  b
  • c ≥ 3a 且 c ≡ 3a mod  b …
  • c ≥ a(b−2) 且 c ≡ a(b−2) mod  b
  • c ≥ a(b−1) 且 c ≡ a(b−1) mod  b

发现对于 c ≥ max (a(b−1),b(a−1)) 的数,都可以表示

因为 a, b 对称,所以可以不妨 a ≤ b

先看 (a−1)(b−1), (a−1)(b−1) + 1, ..., a(b−1) − 1 这 b − 1 个数,它们模 b 互不同余,并且模 b 不为 a(b−1) ,所以它们模 b 的余数一定落在 ka(k=0,1,2,...,(b−2)) 之间,所以它们模 p 的余数覆盖 ka(k=0,1,2,...,(b−2)) ,所以它们都可以被表示

再往前看,即 (a−2)(b−1), (a−2)(b−1) + 1, ..., (a−1)(b−1) − 1 这 b − 1 个数,它们模 b 互不同余,但是这 b − 1 个数只有 b − 2 个数可以被表示,所以必然有一个数不能被表示出来,并且因为我们是从后往前找的,所以这个数是最大的,即答案就在其中

从最后一个开始看, (a−1)(b−1) − 1 ≡  − a ≡ (b−1)a mod  b ,而 (b−1)a 并不在 ka(k=0,1,2,...,b−3) 中,所以这个数无法被表示,答案被找到了

Q.E.D


img_show