题目描述
在本题中,格点是指横纵坐标皆为整数的点。
为了圈养他的牛,农夫约翰建造了一个三角形的电网。他从原点(0,0)牵出一根通电的电线,连接格点(n,m)(0<=n<32000,0<m<32000),再连接格点(p,0)(p>0),最后回到原点。
牛可以在不碰到电网的情况下被放到电网内部的每一个格点上(十分苗条的牛)。如果一个格点碰到了电网,牛绝对不可以被放到该格点之上。那么有多少头牛可以被放到农夫约翰的电网中去呢?
输入
输入文件只有一行,包含三个用空格隔开的整数:n,m和p。
输出
输出文件只有一行,包含一个整数,代表能被指定的电网包含的牛的数目。
样例输入
7 5 10
样例输出
20
参考代码
#include <stdio.h>
int res;
int solve(int n,int m)
{
int sum=0,i,a;
if(n==m)
return (n-1)*(n-2)/2;
if(m<n)
{
m^=n;
n^=m;
m^=n;
}
res=0;
for (i=1;i<n;i++)
{
a=m*i/n;
sum+=a;
if(a*n==m*i)
res++;
}
return sum-res;
}
int main()
{
int n,m,p;
while(scanf("%d%d%d",&n,&m,&p)!=EOF)
{
if(n<=p)
printf("%dn",solve(n,m)+solve(p-n,m)+((n==p || n==0)?0:m-1));
else
printf("%dn",solve(n,m)-solve(n-p,m)-res);
}
return 0;
}
解析
暂无