洛谷P3166:https://www.luogu.org/problemnew/show/P3166
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<iostream> using namespace std; #define maxn 1010 long long n,m,ans=1; long long gcd(long long a,long long b) { if(!b) return a; else return gcd(b,a%b); } long long C(int n,int m) { long long ret=1; for(int i=1;i<=m;i++) ret=ret*(n-i+1)/i; return ret; } int main() { cin>>n>>m; n+=1; m+=1; ans=C(n*m,3); if(n>=3) ans-=C(n,3)*m;//减去横竖的点 if(m>=3) ans-=C(m,3)*n; for(long long i=1;i<n;i++) for(long long j=1;j<m;j++) ans-=(n-i)*(m-j)*(gcd(i,j)-1)*2;//减去斜的点 cout<<ans; }