题解-小凯的疑惑

题解-小凯的疑惑

    • 题目描述
    • 解析部分
    • 代码部分

题目描述

小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有 无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小 凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在 小凯无法准确支付的商品。
输入格式
两个正整数 aa 和 bb,它们之间用一个空格隔开,表示小凯中金币的面值。
输出格式
一个正整数 NN,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。
输入输出样例
输入 #1
3 7
输出 #1
11
说明/提示
【输入输出样例 1 说明】
小凯手中有面值为33和77的金币无数个,在不找零的前提下无法准确支付价值为1, 2,4,5,8,111,2,4,5,8,11 的物品,其中最贵的物品价值为 1111,比1111 贵的物品都能买到,比如:
12 = 3 \times 4 + 7 \times 012=3×4+7×0
13 = 3 \times 2 + 7 \times 113=3×2+7×1
14 = 3 \times 0 + 7 \times 214=3×0+7×2
15 = 3 \times 5 + 7 \times 015=3×5+7×0
【数据范围与约定】
对于 30%30%的数据: 1 \le a,b \le 501≤a,b≤50。
对于 60%60%的数据: 1 \le a,b \le 10^41≤a,b≤104。
对于100%100%的数据:1 \le a,b \le 10^91≤a,b≤109。

解析部分

这是一道比较抠门的数学题
因为a x=ma(mod nb),x=ma+nb.
显然当 n≥0 时 x 可以用 a, b 表示出来,不合题意。
因此当 n = -1时 x取得最大值,此时 x = ma - bx=ma−b。
因此当 n = -1 时 x取得最大值,此时 x = ma - b.
显然当 m 取得最大值 b - 1时 x 最大,此时 x = (b - 1)a - b = ab - a - b.
因此 a, b 所表示不出的最大的数是 ab - a - b.
所以代码真的段的不能再短,简单的不能再简单!

代码部分

#include
using namespace std;

int main(){
	long long a,b;
	cin>>a>>b;
	cout<

你可能感兴趣的:(题解)