题意:求一线段上整数点的个数,整数点(x,y),x和y均为整数。
题解:一段线段(x1,y1)(x2,y2)上的整数点个数为gcd(abs(x2-x1),abs(y2-y1))+1;这个可以通过相似三角形来证明。这题只需要注意下超int就OK了。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL long long
LL gcd(LL a,LL b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
LL T,tt=0;
scanf("%lld",&T);
while(T--)
{
LL x1,y1,x2,y2,a,b,ans=0;
scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2);
a=abs(x2-x1);
b=abs(y2-y1);
//cout<<a<<" "<<b<<endl;
if(a==0)ans=b+1;
else if(b==0)ans=a+1;
else ans=gcd(a,b)+1;
printf("Case %lld: %lld\n",++tt,ans);
}
return 0;
}