P3951 小凯的疑惑

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

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

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

简单的说就是你有两中数,每个数都有无数个,然后问你无法组成的数最大是多少。
首先题目保证了会存在答案,那么a,b肯定是互质的,那么不定方程ax+by = z,肯定是有解的,只是看x, y是不是正数了。我们设最大的无法表示的数为 x,显然 x ≡ a ∗ n ( m o d   b ) ( 0 ≤ n ≤ b − 1 ) x \equiv a*n(mod b)(0≤ n ≤b-1) xan(mod b)(0nb1)(n的范围的解释:若 n ≥ b n ≥ b nb 那么根据同余定理, a ∗ n % b ≡ a ∗ ( n % b ) % b a*n\%b \equiv a*(n\%b)\%b an%ba(n%b)%b 我们就相当于把a * n分成了两部分, a ∗ n = a ∗ x + b ∗ y a * n = a * x + b * y an=ax+by 其中 x小于b,由于我们是在模b意义下的同余方程,所以 b ∗ y b*y by最后在 m ∗ b m*b mb中(下面的公式) )

显然 x = a ∗ n + m ∗ b ( 0 ≤ n ≤ b − 1 ) x = a*n + m*b(0≤ n ≤b-1) x=an+mb(0nb1)

对于有解的情况,必定满足 n , m ≥ 0 n,m\geq 0 n,m0,所以对于满足条件的 x x x,必定存在 n < 0 n<0 n0 m < 0 m <0 m0。为了使 x x x尽量的大,我们取 m = − 1 , n = b − 1 m = -1, n = b-1 m=1,n=b1 x = a ∗ ( b − 1 ) − b x = a*(b-1)-b x=a(b1)b
也就是 x = a ∗ b − a − b x = a*b-a-b x=abab
记得开long long

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
  LL n, m;
  cin >> n >> m;
  cout << n * m - n - m << endl;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值