洛谷 P3951 NOIP 2017 小凯的疑惑

题目描述

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

输入格式

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

输出格式

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

输入输出样例

输入 #1

3 7

输出 #1

11

说明/提示

【输入输出样例 1 说明】

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

\(12 = 3 \times 4 + 7 \times 0\)

\(13 = 3 \times 2 + 7 \times 1\)

\(14 = 3 \times 0 + 7 \times 2\)

\(15 = 3 \times 5 + 7 \times 0\)

【数据范围与约定】

对于 \(30\%\)的数据: \(1 \le a,b \le 50\)

对于 \(60\%\)的数据: \(1 \le a,b \le 10^4\)

对于\(100\%\)的数据:\(1 \le a,b \le 10^9\)

分析

我们不妨设 \(a<b\),答案为\(x\)

如果\(x\)可以被\(a\)和\(b\)表示出来的话,那么就有

\(x=ma+nb(m \geq 0,n \geq 0)\)

但是\(x\)不能表达成上面的式子,我们要使\(x\)最大,因为\(a<b\),所以令\(n=-1\)

而且\(ma\)不能被\(b\)整除,否则\(b\)又会多出一个因子

因此\(m_{max}=b-1\)

所以\(x=a(b-1)-b=ab-a-b\)

当\(a > b\)时推出的式子完全相同,因此最终的答案为

\(ab-a-b\)

代码

#include<cstdio>
int main(){
long long a,b;
scanf("%lld%lld",&a,&b);
printf("%lld\n",a*b-a-b);
return 0;
}
05-11 09:30