数学专项counting:LA 3720
2013-09-18 22:43
288 查看
这道题的关键是枚举对角线的斜率,当枚举的矩形的长宽互质时,则该斜率第一次出现,将所有满足该长宽的对角线加上。这样,这些矩形的长宽的2倍的矩形被重复计算了一次,所以当长宽的gcd为2时,要将其扣除。这样,即得结果。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; const int maxn=310; int gcd(int a,int b){return b==0?a:gcd(b,a%b);} int g[maxn][maxn]; void init() { for(int i=1;i<=300;i++) for(int j=i;j<=300;j++) g[i][j]=g[j][i]=gcd(i,j); } int main() { //freopen("in.txt","r",stdin); init(); int n,m; while(~scanf("%d%d",&n,&m)) { if(!n && !m) break; n--;m--; LL ans=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { int tmp=(n-i+1)*(m-j+1); if(g[i][j]==1) ans+=tmp; else if(g[i][j]==2) ans-=tmp; } ans*=2; printf("%lld\n",ans); } return 0; }
相关文章推荐
- 数学专项counting:LA 3357
- 数学专项counting:LA 3295
- 数学专项counting:LA 4064
- 数学专项counting:LA 5846
- 数学专项counting:UVa 11529
- 数学专项counting:UVa 10883
- 数学专项number_theory:LA 4382
- 数学专项counting:UVa 10079
- 数学专项counting:UVa 10081
- 数学专项number_theory:LA 4079
- 数学专项matrix:LA 2561
- 数学专项number_theory:LA 2955
- 数学专项counting:UVa 580
- 数学专项counting:UVa 11481
- 数学专项counting:UVa 417
- 数学专项counting:UVa 10237
- 数学专项number_theory:LA 3262
- 数学专项counting:UVa 10128
- 数学专项counting:UVa 11038
- LA 3720 Highway n x m的点阵 有多少条直线穿过至少2个点