// Pratiyush Mishra #include <bits/stdc++.h> #define ll long long int using namespace std; ll gcd(ll a, ll b) { if (b == 0) return a; else return gcd(b, a % b); } void prime_factorization(ll n, vector<pair<ll, ll>> &v) { for (int i = 2; (i * i) <= n; i++) { if (n % i != 0) continue; ll cnt = 0; while (n % i == 0) { n /= i; ++cnt; } v.push_back({i, cnt}); } if (n != 1) v.push_back({n, 1}); sort(v.begin(), v.end()); } void mainSolve() { ll a, b; cin >> a >> b; vector<pair<ll, ll>> prime_fac_a, prime_fac_b; prime_factorization(a, prime_fac_a); prime_factorization(b, prime_fac_b); if (prime_fac_a.size() != prime_fac_b.size() || prime_fac_a[0].first != prime_fac_b[0].first) { cout << "NO \n"; return; } ll g = gcd(prime_fac_a[0].second, prime_fac_b[0].second); ll c1 = prime_fac_a[0].second / g; ll c2 = prime_fac_b[0].second / g; int n = prime_fac_b.size(); for (int i = 1; i < n; i++) { if (prime_fac_a[i].first != prime_fac_b[i].first) { cout << "NO \n"; return; } ll curr_g = gcd(prime_fac_a[i].second, prime_fac_b[i].second); ll curr_c1 = prime_fac_a[i].second / curr_g; ll curr_c2 = prime_fac_b[i].second / curr_g; if (curr_c1 != c1 || curr_c2 != c2) { cout << "NO \n"; return; } } cout << "YES \n"; } int main() { #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int t; cin >> t; while (t--) { mainSolve(); } return 0; }