64 lines
2.0 KiB
Markdown
64 lines
2.0 KiB
Markdown
|
|
## $AcWing$ $525$小凯的疑惑
|
|||
|
|
|
|||
|
|
### 一、题目描述
|
|||
|
|
小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。
|
|||
|
|
|
|||
|
|
每种金币小凯都有无数个。
|
|||
|
|
|
|||
|
|
在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。
|
|||
|
|
|
|||
|
|
现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?
|
|||
|
|
|
|||
|
|
注意:输入数据保证存在小凯无法准确支付的商品。
|
|||
|
|
|
|||
|
|
**输入格式**
|
|||
|
|
输入数据仅一行,包含两个正整数 $a$ 和 $b$,它们之间用一个空格隔开,表示小凯手中金币的面值。
|
|||
|
|
|
|||
|
|
**输出格式**
|
|||
|
|
输出文件仅一行,一个正整数 $N$,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。
|
|||
|
|
|
|||
|
|
**数据范围**
|
|||
|
|
$1≤a,b≤10^9$
|
|||
|
|
|
|||
|
|
**输入样例**:
|
|||
|
|
```
|
|||
|
|
3 7
|
|||
|
|
```
|
|||
|
|
**输出样例**:
|
|||
|
|
```
|
|||
|
|
11
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 二、题目解析
|
|||
|
|
|
|||
|
|
结论:
|
|||
|
|
>如果 𝑎,𝑏 均是正整数且互质,那么由 𝑎𝑥+𝑏𝑦,𝑥≥0,𝑦≥0 不能凑出的最大数是 $(a-1)*(b-1)-1$。
|
|||
|
|
|
|||
|
|
证明:
|
|||
|
|
|
|||
|
|
首先证明 𝑎𝑏−𝑎−𝑏 不能被 𝑎𝑥+𝑏𝑥,𝑥≥0,𝑦≥0表示出。
|
|||
|
|
|
|||
|
|
反证法,假设 𝑎𝑏−𝑎−𝑏=𝑎𝑥+𝑏𝑦,那么 𝑎𝑏=𝑎(𝑥+1)+𝑏(𝑦+1),由于 𝑎|𝑎𝑏,𝑎|𝑎(𝑥+1),所以 𝑎|𝑏(𝑦+1)
|
|||
|
|
,由于 𝑎,𝑏 互质,所以 𝑎|(𝑦+1),由于 𝑦≥0,所以 𝑎<=𝑦+1,所以 𝑏(𝑦+1)≥𝑎𝑏。同理可得 𝑎(𝑥+1)≥𝑎𝑏,所以 𝑎(𝑥+1)+𝑏(𝑦+1)≥2𝑎𝑏>𝑎𝑏,矛盾。
|
|||
|
|
|
|||
|
|
证明 𝑎𝑏−𝑎−𝑏+𝑑,𝑑>0 一定可以表示成 𝑎𝑥+𝑏𝑦,𝑥,𝑦≥0 的形式,可以参考[这篇博客](https://www.cnblogs.com/Yuzao/p/7074465.html)。
|
|||
|
|
|
|||
|
|
时间复杂度分析
|
|||
|
|
计算 𝑎𝑏−𝑎−𝑏 的时间复杂度是 𝑂(1)。
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### 三、代码
|
|||
|
|
```cpp {.line-numbers}
|
|||
|
|
#include <bits/stdc++.h>
|
|||
|
|
using namespace std;
|
|||
|
|
typedef long long LL;
|
|||
|
|
int main() {
|
|||
|
|
LL a, b;
|
|||
|
|
cin >> a >> b;
|
|||
|
|
cout << (a - 1) * (b - 1) - 1 << endl;
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|