题意略。
题解:直接算总方案然后减去横的和竖的,最后用gcd减去斜的。。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int n,m;
typedef long long ll;
ll c[2000*2000][4];
inline ll gcd(ll a,ll b)
{
if (a%b==0)return b;
else return gcd(b,a%b);
}
int main()
{
scanf("%d%d",&n,&m);
n++,m++;
c[0][0]=1;
fo(i,1,n*m)
{
c[i][0]=1;
fo(j,1,3)
c[i][j]=c[i-1][j]+c[i-1][j-1];
}
ll sum=n*m;
ll ans=c[sum][3];
//printf("%lld\n",c[sum][3]);
ans=ans-c[n][3]*m-c[m][3]*n;
//printf("%lld\n",ans);
fo(i,1,n-1)
fo(j,1,m-1)
if (gcd(i,j)+1>2)
ans=ans-(gcd(i,j)-1)*2*(n-i)*(m-j);
printf("%lld\n",ans);
}