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