/*
ID: niepeng1
PROG: fence9
LANG: C++
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/*
天知道我的那个方法也是扫描直线,但是边界有一点问题,无语了,y了很多很多次。
其实我还是认为我的方法正确。可是它在第7个数据就y掉了。
其实是没有用up,down.而是统统用down,然后判断高的哪一个边是否有整数点,有的话
减一,求和。
为什么是错的呢,还没有弄明白?
方法二、
任意多边形满足:A = I + B/2 - 1
I为多边形面积,B为边界上整数点的个数。
A为多边形内的整数点的个数。
点(W,X)、(Y,Z)间的整数点的个数 1 + gcd(|Y - W|, |Z - X|).
*/
int up(double a)
{
int a1=(int)(floor(a));
if( (a-a1)>1e-6)
a1++;
return a1;
}
int down(double a)
{
int a1=(int)ceil(a);
if((a1-a)>1e-6)
a1--;
return a1;
}
int main()
{
freopen("fence9.in","r",stdin);
freopen("fence9.out","w",stdout);
int m,n,p,total=0,tem;
double k1,k2,i,j,j1;
scanf("%d%d%d",&n,&m,&p);
k1=(double)(n+0.0)/m;
k2=(double)(n-p+0.0)/m;
for(i=1;i<m;i++)
{
j=k2*i+p;
j1=k1*i;
tem = up(j)-down(j1)-1;
total+=tem;
}
printf("%d/n",total);
return 0;
}