思路:
如果可行,那么答案的构成一定是某个大的数减去某个小的数,或者\(a\)和\(b\)某一个数一开始就等于\(x\),我们把后一种情况特判掉。
如何处理前面一种情况:我们一直保证\(a > b\),在处理过程中\(x <= max(a, b)\)恒成立。如果\(a\) 减去若干个\(b\)就能等于\(x\), 那么\(a\) % $ x$ \(=\) \(a\) % \(b\), 不断把模数更新最大的那个值,模拟一遍,至\(a\)或者\(b\)有一个变成\(0\)则无解,否则有解。
#include <bits/stdc++.h>
#define PII pair<int,int>
#define LL long long
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define sz(x) (int)x.size()
using namespace std;
LL a, b, x;
void solve()
{
scanf("%lld %lld %lld", &a, &b, &x);
while(a && b){//a > b
if(a < b) swap(a, b);
if(a < x){
puts("No");
return;
}
if(x % b == a % b){
puts("Yes");
return;
}
a = a % b;
}
puts("No");
}
int main()
{
int test = 1;
scanf("%d",&test);
while(test -- )
{
solve();
}
return 0;
}