直线上的整点个数
题目描述
在一个直角坐标系中有一条线段,求这条线段上有几个整数点;
输入
输入一个数T(T<10000),表示有T组测试数据;
每组数据输入有四个整数x1, y1, x2, y2,表示线段的两端点坐标;
(-1e16<=x1,x2,y1,y2<=1e16)
输出
输出一个整数,表示这条线段上整数点个数;
样例输入
2 1 1 5 5 1 3 4 12
样例输出
5 4
题意 : 判断直线上的整点的个数,求一个 gcd 就可以
ll a1, b1, a2, b2; ll gcd(ll a, ll b){ return b==0?a:gcd(b, a%b); } int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int t; cin >>t; while(t--){ scanf("%lld%lld%lld%lld", &a1, &b1, &a2, &b2); ll f1 = abs(a1-a2); ll f2 = abs(b1-b2); ll g = gcd(f1, f2); printf("%lld\n", g+1); } return 0; }
东北日出西边雨 道是无情却有情