简要题意:
给定两种互质的硬币面值,求不能用这两个硬币表示出的面值个数。
本题作为 ( exttt{NOIP 2017}) 的签到题,有一定的难度。
首先,互质 是一个很重要的条件。
为什么要互质?也就是说,(gcd(x,y) = 1).
众所周知:
(ax + by = k) 无解且 (k) 是最大的那个。显然:
[a leq y-1
]
(这是因为,(lfloor frac{a}{y} floor) 的部分可以当做 (a imes b) 的整体被列入 (b) 中)
此时,(b geq 0) 则显然有解。所以不可以。(b<0)
此时,(b) 越大则 (k) 越大,所以取 (a = y-1 , b=-1).
代入得:
[k=(y-1)x - y = xy - x - y
]
(原来这么简单)
时间复杂度:(O(1)).
实际得分:(100pts).
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
inline int read(){char ch=getchar();int f=1;while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}
int x=0;while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;}
int main(){
int n=read(),m=read();
printf("%lld
",1ll*n*m-n-m);
return 0;
}