这是一道数论题,正如各位大佬所讲。
看到这道题,我首先想的就是打表。但是数据太大,显然打表占用空间太多。
但是,我们可以打一个小一点的表,比如20×20(点表示gcd(a,b)=1):

然后整齐的等差数列成功地引起了注意。我们可以把等差数列补全,如第四行变为了:
258111417⋯56
Very Nice!首项v1=a−2,公差d=a−1,要求的项是vb−1;根据小学时学的等差数列求第n项的公式:vn=v1+(n−1)d,再把数带进去:vb−1=(a−2)+(b−2)(a−1)=(a−1)(b−1)−1,那么代码就简单了:
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a, b;
signed main(){
cin >> a >> b;
cout << (a - 1) * (b - 1) - 1 << endl;
return 0;
}
注意:一定要开long long!
因为:
对于 30% 的数据:1≤a,b≤50;
对于 60% 的数据:1≤a,b≤104;
对于 100% 的数据:1≤a,b≤109。