D. X-Magic Pair
显然对于两个操作 可以一眼识别是辗转相减
可是我们怎么利用这个信息
我们可以发现 如果a>b;
我们将更小的b替换成|a-b|那么我们显然又转回来了
我们考虑每次将a替换成a-b 这里只有我们a-kb<b时 才会发生改变(就相当于辗转相除了)
我们考虑如何计算这一过程是否有a==x 我么考虑
我们a=k1b+r x必须是k2b+r 也就是同余的时候才有解
我们再每一次辗转相除的时候 判断a x是否同余即可
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
int up(int a,int b){return a<0?a/b:(a+b-1)/b;}
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl
#define NO cout<<"NO"<<endl
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
int x,flag;
int gcd(int a,int b){
if(b&&a%b==x%b&&a>=x)flag=1;
return b==0?a:gcd(b,a%b);
}
void solve() {
int a,b;cin>>a>>b>>x;
flag=0;
if(a<b)swap(a,b);
gcd(a,b);
flag?YES:NO;
}
signed main(){
fast
int t;t=1;cin>>t;
while(t--) {
solve();
}
return ~~(0^_^0);
}
标签:Educational,const,int,Codeforces,替换成,117,return,我们
From: https://www.cnblogs.com/ycllz/p/16793185.html