小凯的疑惑 [2017TG D1T1]

应该叫程序员的疑惑

 

题目描述

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

输入格式

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

输出格式

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

输入输出样例

输入 
3 7
输出
11

说明/提示

【输入输出样例 1 说明】

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

12=3×4+7×0

13=3×2+7×1

14=3×0+7×2

15=3×5+7×0

 

代码

#include<cstdio>
using namespace std;

int main()
{
    long long a,b;
    scanf("%lld%lld",&a,&b);
    printf("%lld",a*b-a-b);
    return 0;
 } 

哼哼,如此潦草的代码。。居然是如此潦草的代码???!!!

好的吧,看了luogu题解中大佬们的证明【完美证明了我的蒟蒻属性】

分析

不妨设 a < b

假设答案为 x

xma(modb)(1mb1)

x=ma+nb(1mb1)

显然当 n0 时 x 可以用 a, b 表示出来,不合题意。

因此当 n = -1x取得最大值,此时x=mab。

显然当 mm 取得最大值 b1时x最大,此时x=(b1)ab=abab

因此 a, b所表示不出的最大的数是 ab - a - b

 

posted @ 2019-08-08 09:45  三金Elsa  阅读(151)  评论(0编辑  收藏  举报