/* 思路:1.先选三个点 2.去掉同行情况 3.去掉同列情况 4.枚举矩形大小去掉重复情况 */ #pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #include<stack> #include<vector> #include<set> #include<map> #define L(x) (x<<1) #define R(x) (x<<1|1) #define MID(x,y) ((x+y)>>1) #define bug printf("hihi\n") #define eps 1e-8 //typedef __int64 ll; typedef long long ll; using namespace std; #define INF 0x3f3f3f3f #define N 1005 int n,m; ll C(ll n,ll m) { if(m>n) return 0; ll ans=1; for(int i=0;i<m;i++) ans=ans*(n-i)/(i+1); return ans; } int main() { int i,j,ca=0; while(scanf("%d%d",&n,&m),n+m) { ll ans=C((n+1)*(m+1),3); ans-=(ll)C(n+1,3)*(m+1)+(ll)C(m+1,3)*(n+1); // cout<<ans<<endl; for(i=1;i<=n;i++) for(j=1;j<=m;j++) { int c=__gcd(i,j); ans-=(ll)(c-1)*(n-i+1)*(m-j+1)*2; // ans-=(ll)(C(c,2)*(n-i+1)*(m-j+1)*2;//之前wa 的地方这样 // printf("%d %d %d %lld\n",i,j,c,(ll)C(c,2)*(n-i+1)*(m-j+1)*2); } printf("Case %d: %lld\n",++ca,ans); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-27 06:00:10