题目大意:求一个三角形(0,0)、(p,0)、(n,m)内有多少个坐标为整数的点。
方法:这题要用到皮克定理(这名字一听就n高级,要是那天弄出个mw定理我就死而无憾了),介绍了多边形面积S与内部顶点数a和边上顶点数b的关系S=a+b/2-1,证明的话自己百度去(谷歌也可以)。S用矢量叉积求;至于b的话,可以证明一条线段((0,0),(n,m))上的格点数等于n与m的最大公约数+1,一条线段((p,0),(n,m))上的格点数等于n-p与m的最大公约数+1。接着套上皮克定理就好了。
下面附程序:
var n,m,p,b:longint; s:real; function gcd(x,y:longint):longint; begin if y=0 then exit(x); if x mod y=0 then exit(y); gcd:=gcd(y,x mod y); end; function max(x,y:longint):longint; begin if x>y then exit(x) else exit(y); end; function min(x,y:longint):longint; begin if x<y then exit(x) else exit(y); end; begin readln(n,m,p); s:=m*p/2; b:=gcd(max(n,m),min(n,m))+p+gcd(max(m,abs(n-p)),min(m,abs(n-p))); writeln(s-b/2+1:0:0); end.