ACM UVA-10407

gcd

n1 = d1*q1+r1

n2 = d1Xq2+r1

n3 = d1Xq3+r1

要找出d1出來

a1= n1-n2 = d1X(q1-q2)

a2 = n1-n3 = d1X(q1-q3)

只要找出a1跟a2的最大公因數即可求出

如果只有兩個呢?

a1 = (n1-n2)X1 = d1X(q1-q2)

那麼n1-n2自然就是最大的那一個答案了。

int gcd(int a,int b){
    return b == 0?a:gcd(b,a%b);

}
int main(int argc, char const* argv[])
{
    string line;

    while(getline(cin,line) && line[0] != '0'){
        istringstream stream(line);
        int n;
        vector<int> p;
        stream>>n;
        int a = n;
        while(stream>>n && n != 0){
            p.push_back(abs((n-a)));
        }
        int l = p.size();
        int ans = 0;
        if(l > 1){
        for(int i = 0;i <l;i++){
            ans = gcd(p[i],ans);
        }
        }
        else{
            ans = gcd(0,p[0]);
        }
        printf("%d\n",ans);
    }

    return 0;
}