思路
这道题我们要求 是否有整数解
,
我们可以先讨论 是否有整数解,然后再看
,是否有整数解,
于是我们可以考虑用裴蜀定理
裴蜀定理
设 ,则存在整数
使得
所以存在整数 使得
的条件是
接下来我们求出 的最大公约数即可,根据题目还有
,以此类推,我们只需要判断是否
且
综上所述,我们只需要判断是否 即可
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;
}
谢谢大家

京公网安备 11010502036488号