Description
给定两个整点 (m,n) 和 (p,0) ,与坐标原点 (0,0) 构成三角形,求三角形内的整点数量
Analysis
找到这么一道神奇的题目以及神奇的定理
皮克定理
一个计算点阵中顶点在格点上的多边形面积公式: S=a+b2−1 ,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积
S=ah2 , b=p+gcd(n,m)+gcd(|p−n|,m) ,那么 a=S−b2+1
Code
/*
ID:wjp13241
PROG:fence9
LANG:C++
*/
#include <stdio.h>
#include <cmath>
using namespace std;
struct pos{int x,y;}t[3];
double cros(pos a,pos b,pos c)
{
return ((a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y))*0.5;
}
int gcd(int x,int y)
{
return !y?x:gcd(y,x%y);
}
int main()
{
scanf("%d%d%d",&t[1].x,&t[1].y,&t[2].x);
double S=fabs(cros(t[1],t[2],t[0]));
int b=t[2].x+gcd(t[1].x,t[1].y)+gcd(fabs(t[2].x-t[1].x),t[1].y);
printf("%d\n",(int)(S-b/2+1));
return 0;
}