直线上的整点个数

题目描述

 在一个直角坐标系中有一条线段,求这条线段上有几个整数点;

输入

输入一个数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;
}

 

posted @ 2018-04-17 19:55  楼主好菜啊  阅读(904)  评论(0编辑  收藏  举报