主要是记一点自己不会的东西
这道题化简后就是判断分数a/b化为最简分数后的分数c/d,c+d是否为2的n次方
是就yes,否则no
首先a,b最大公约数,函数gcd
其次判断a是否为2的n次方:a&(a-1)==0
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b)
{
return b == 0 ? a : gcd(b, a % b);
}
int main()
{
int t;
cin >> t;
while (t--)
{
ll a, b;
cin >> a >> b;
ll d = gcd(a, b);
//cout << d << endl;
a /= d, b /= d;
ll c = a + b;
if ((ll)(c&(c-1))==(ll)0)
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
}
return 0;
}