rt
#include<bits/stdc++.h>
using namespace std;
int t, n, a[500005], pr[1505], cnt, h[1505]; //pr为1~10000的所有质数,h表示一个质数出现的次数
bool vis[10005];
int main () {
memset(pr, 0x3f, sizeof pr);
scanf("%d", &t);
for(int i = 2;i <= 10000;++i) {
if(!vis[i]) pr[++cnt] = i;
for(int j = 1;j<=cnt && i*pr[j]<=10000;++j) {
vis[i*pr[j]] = true;
if(i % pr[j] == 0) break;
}
}
while(t--) {
scanf("%d", &n);
int mx = 0;
for(int i = 1;i <= n;++i) scanf("%d", a+i), mx = max(mx, int(sqrt(a[i])));//mx表示所有数平方根的最大值
for(int i = 1;pr[i] <= mx;++i) h[i] = 0;
if(n == 2) {puts("Yes"); continue;} //n=2一定满足条件
bool flag = true;
for(int i = 1;i <= n;++i) {
for(int j = 1;pr[j] <= mx;++j)
if(a[i]%pr[j]==0) {
if(h[j]) {puts("No"); flag = false; break;}
else h[j]=1; //质数已经出现过,再有一个数也能整除这个质数就不行了
}
if(!flag) break;
}
if(flag) puts("Yes");
}
return 0;
}