1. 程式人生 > >【NOIP2017提高Day1】小凱的疑惑

【NOIP2017提高Day1】小凱的疑惑

題目描述

小凱手中有兩種面值的金幣,兩種面值均為正整數且彼此互素。每種金幣小凱都有 無數個。在不找零的情況下,僅憑這兩種金幣,有些物品他是無法準確支付的。現在小 凱想知道在無法準確支付的物品中,最貴的價值是多少金幣?注意:輸入資料保證存在 小凱無法準確支付的商品。

完整題面

題解:

其實自己手寫幾個就能發現規律了。。。

好吧還是需要證明的,設答案為x 則有 x ≡ ma (modb) (1≤m≤b−1) 即 x = ma + nb (1≤m≤b−1),m最大隻能取b - 1,因為如果取b的話,原式變為x = (a + n) * b ,可以用a + n 個b湊成x,不符合題意。那我們再考慮x = ma + nb (1≤m≤b−1)這個式子,顯然n大於等於0時,x也可以用a和b表示出來,因此n需要小於0,那麼n取-1時得到的x是最大的,原式變為x = ma − b,由上面的範圍,m最大可以取b - 1,然後可以化為

x=(b−1)a−b=ab−a−b

即為最後的答案

程式碼:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<cmath>
#define MAXA 10005
using namespace std;
typedef long long LL;
LL a,b;
int main() {
//	freopen("math.in","r",stdin);
//	freopen("math.out","w",stdout);
    scanf("%lld %lld",&a,&b);
    printf("%lld",a * b - a - b);
}