【题目链接】
http://www.lydsy.com/JudgeOnline/problem.php?id=3505
【题意】
在n个格子中任选3点构成三角形的方案数。
【思路】
任选3点-3点共线的情况。
【代码】
#include<cstdio>
#include<iostream>
using namespace std; typedef long long ll; ll C[][]; void get_pre(int n)
{
C[][]=;
for(int i=;i<=n;i++) {
C[i][]=;
for(int j=;j<=;j++)
C[i][j]=C[i-][j]+C[i-][j-];
}
}
int gcd(int i,int j)
{
return j==?i:gcd(j,i%j);
}
int n,m; int main()
{
scanf("%d%d",&n,&m);
n++,m++;
if(n>m) swap(n,m);
get_pre(n*m);
ll ans=C[n*m][],tmp=;
ans-=n*C[m][]+m*C[n][];
for(int i=;i<n;i++) for(int j=;j<m;j++) {
int x=gcd(i,j)+;
if(x>)
ans-=(x-)**(n-i)*(m-j);
}
printf("%lld\n",ans);
return ;
}