在一个平面坐标系中,我们可以选出三个不全在一条线上的点构成一个三角形。我们称一个在三角形内(不包含三角形的边上),横纵坐标皆为整数的点位这个三角形的内点。 对于一个由(0,0)、(n,m)、(p,0)作为顶点构成的三角形,请你设计程序求出他的内点数。
输入包括一行,包括三个用空格分隔的整数,分别为n,m,p(0 ≤ n < 32000,0 < m < 32000,0 < p < 32000)。
输出仅一个数,为这个三角形的内点的个数。
样例输入
7 5 10
样例输出
20
皮克定理:2s=2a+b-2
s:三角形面积
a:三角形内部的点的数目
b:三角形边界上的点的数目
#include <bits/stdc++.h> #define ll long long using namespace std; const ll N=1e9+7; int n,m,p; int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } int main() { scanf("%d %d %d",&n,&m,&p); int s=m*p/2; int sum=s+1-(p+gcd(n,m)+gcd(abs(n-p),m))/2; printf("%d ",sum); return 0; }