这是一道数论题,正如各位大佬所讲。

看到这道题,我首先想的就是打表。但是数据太大,显然打表占用空间太多。

但是,我们可以打一个小一点的表,比如20×2020\times20(点表示gcd(a,b)1\gcd(a,b)\neq1):

然后整齐的等差数列成功地引起了注意。我们可以把等差数列补全,如第四行变为了:

258111417562\qquad5\qquad8\qquad11\qquad14\qquad17\qquad\cdots\qquad56

Very Nice!首项v1=a2v_{1}=a-2,公差d=a1d=a-1,要求的项是vb1v_{b-1};根据小学时学的等差数列求第nn项的公式:vn=v1+(n1)dv_{n}=v_{1} + (n-1)d,再把数带进去:vb1=(a2)+(b2)(a1)=(a1)(b1)1v_{b-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%30\% 的数据:1a,b501 \leq a,b \leq 50;

对于 60%60\% 的数据:1a,b1041 \leq a,b \leq 10^4;

对于 100%100\% 的数据:1a,b1091 \leq a,b \leq 10^{9}