#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <algorithm>
#include <queue>
#include <vector>
#include <iostream>
#include <map>
#include <string>
#include <stack>
#include <set>
#include <utility>
#include <bitset>
#include <ctime>
#include <fstream>
//#include <unordered_map>

using namespace std;
int a, b, d, c, f, e, n, m, k, s, bj, c1, c2, c3, max1, min1, tot, prime[100010], num[100010], num2[100010];
bool mp[100010];

int main()
{
    scanf("%d", &s);
    for (a = 2; a <= 32000; ++a)
    {
        if (!mp[a])
        {
            prime[d++] = a;
            for (c = a * a; c <= 32000; c += a)
                mp[c] = true;
        }
    }
    while (s--)
    {
        scanf("%d %d %d", &n, &m, &k);
        int sum = 0;
        e = f = 0;
        for (a = 0; a < d; ++a)
        {
            b = 0;
            while (n % prime[a] == 0)
            {
                b++;
                n /= prime[a];
            }
            num[a] = b;
            sum += b;
            b = 0;
            while (m % prime[a] == 0)
            {
                b++;
                m /= prime[a];
            }
            num2[a] = b;
            sum += b;
            if (num2[a] > num[a])
                f += num2[a] - num[a];
            else
                e += num[a] - num2[a];
        }
        if (n == 1)
        {
            if (m != 1)
            {
                f++;
                sum++;
            }
        }
        else
        {
            if (m == 1)
            {
                e++;
                sum++;
            }
            else
            {
                sum += 2;
                if (n != m)
                {
                    e++;
                    f++;
                }
            }
        }
        if (k > sum)
            printf("NO\n");
        else
        {
            if (k == 1 && ((e != 0 && f != 0) || (e == 0 && f == 0)))
                printf("NO\n");
            else
                printf("YES\n");
        }
    }
    return 0;
}