总的ans就是c(n*m,3)-c(m,3)-c(n,3)-cnt
cnt为三个点在同一斜线的情况
然后我们枚举在某一斜线上三个三角形所构成的矩形的长宽设为x,y
那么泽样的矩形一共有(n-x)*(m-y)*2个为什么要乘以二呢?
因为有两条斜线
然后同一斜线上的点有gcd(x,y)-1个
然后答案就出来了啊
下面是代码
#include<iostream>
#include<fstream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
long long n,m;
long long ans;
int gcd(int a,int b){
if(b==0){
return a;
}else{
return gcd(b,a%b);
}
}
long long C(int x){
long long y=x;
return (y)*(y-1)*(y-2)/6;
}
int main(){
cin>>n>>m;
n++;m++;
ans=C(n*m)-(m)*C(n)-(n)*C(m);
for(int x=1;x<m;x++){
for(int y=1;y<n;y++){
ans-=(gcd(x,y)-1)*(n-y)*(m-x)*2;
}
}
cout<<ans<<endl;
return 0;
}