#include #include using namespace std; typedef long long ll; typedef long double ld; // read template long long readInt(long long l,long long r,char endd){ long long x=0; int cnt=0; int fi=-1; bool is_neg=false; while(true){ char g=getchar(); if(g=='-'){ assert(fi==-1); is_neg=true; continue; } if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(fi!=0 || cnt==1); assert(fi!=0 || is_neg==false); assert(!(cnt>19 || ( cnt==19 && fi>1) )); } else if(g==endd){ assert(cnt>0); if(is_neg){ x= -x; } assert(l<=x && x<=r); return x; } else { assert(false); } } } string readString(int l,int r,char endd){ string ret=""; int cnt=0; while(true){ char g=getchar(); assert(g!=-1); if(g==endd){ break; } cnt++; ret+=g; } assert(l<=cnt && cnt<=r); return ret; } long long readIntSp(long long l,long long r){ return readInt(l,r,' '); } long long readIntLn(long long l,long long r){ return readInt(l,r,'\n'); } string readStringLn(int l,int r){ return readString(l,r,'\n'); } string readStringSp(int l,int r){ return readString(l,r,' '); } // end const int M = 1e5 + 239; const int X = 1e6 + 239; int n, a[M], mn[X]; vector id[X]; vector prime; void solve() { n = readIntLn(1, (int)(1e5)); for (int i = 0; i < n; i++) { if (i < n - 1) a[i] = readIntSp(1, (int)(1e6)); else a[i] = readIntLn(1, (int)(1e6)); } for (int x : prime) id[x].clear(); for (int i = 0; i < n; i++) { while (a[i] > 1) { int p = mn[a[i]]; int k = 0; while (a[i] % p == 0) { a[i] /= p; k++; } id[p].push_back(k); } } int ans = 1; for (int x : prime) if (!id[x].empty()) { int l = 0; int r = 0; for (int k : id[x]) r = max(r, k + 1); int num0 = n - id[x].size(); while (r - l > 1) { int h = (l + r) >> 1; int now = 0; for (int k : id[x]) if (k >= h) now += ((k - h) >> 1); for (int k : id[x]) if (k < h) now -= (h - k); now -= num0 * h; if (now >= 0) l = h; else r = h; } for (int i = 0; i < l; i++) ans *= x; } cout << ans << "\n"; } int main() { memset(mn, -1, sizeof(mn)); for (int i = 2; i < X; i++) if (mn[i] == -1) { prime.push_back(i); for (int j = i; j < X; j += i) if (mn[j] == -1) mn[j] = i; } int T = readIntLn(1, 5); while (T--) solve(); assert(getchar() == -1); return 0; }