洛谷 P3951 NOIP 2017 小凱的疑惑

liuchanglc發表於2020-08-25

洛谷 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;
}

相關文章