题目链接

思路

这道题我们要求 是否有整数解
我们可以先讨论 是否有整数解,然后再看 ,是否有整数解,
于是我们可以考虑用裴蜀定理

裴蜀定理

,则存在整数 使得

所以存在整数 使得 的条件是
接下来我们求出 的最大公约数即可,根据题目还有 ,以此类推,我们只需要判断是否
综上所述,我们只需要判断是否 即可

P.S.如果想求出一组解需要用扩展欧几里得算法

代码

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
int T;
ll a ,b ,c ,d;
ll gcd (ll r1 ,ll r2) {//欧几里得算法(辗转相除法)
    while (r2) {
        r1 %= r2;
        swap (r1 ,r2);
    }
    return r1;
}
int main () {
    scanf ("%d",&T);
    while (T --) {
        scanf ("%lld%lld%lld%lld",&a ,&b ,&c ,&d);
        a = abs (a) ,b = abs (b) ,c = abs (c) ,d = abs (d);//注意可能会有负数
        if (d == 0) {
            puts ("YES"); continue;
        }
        ll cmp = gcd (a , gcd (b ,c));
        if (cmp == 0) {
            puts ("NO"); continue;
        }
        if (d % cmp != 0) {
            puts ("NO"); continue;
        }
        puts ("YES");
    }
    return 0;
}

谢谢大家