Diary_3.20

1.

const int maxn = 1e6+10;
bool is_not_pri[maxn];
int dp[maxn], tol;
void presolve(){
    is_not_pri[1] = true;
    for(int i=2; i<maxn; i++){
        if(is_not_pri[i])   continue;
        for(int k=i+i; k<=maxn; k+=i){
            is_not_pri[k] = true;
        }
    }
    for(int i=2; i<maxn; i++){
        if(is_not_pri[i] == false){
            dp[tol++] = i;
        }
    }
}
int n;
void solve(){
    cin >> n;
    unordered_map<int, int> cnt;
    for(int i=0; i<n; i++){
        int x;  cin >> x;
        for(int k=0; k<tol; k++){
            if(dp[k] > x)   break;
            int pos = lower_bound(dp, dp+tol, x)-dp;
            if(dp[pos] == x){
                cnt[x]++;
                x = 1;
                break;
            }
            while(x%dp[k] == 0){
                cnt[dp[k]]++;
                x /= dp[k];
            }
        }
    }
    for(auto &x: cnt){
        if(x.second%n){
            cout << "NO" << endl;
            return;
        }
    }
    cout << "YES" << endl;
}
signed main(){
    int t;  t = 1;
    presolve();
    cin >> t;
    while(t--){
        solve();
    }
}
posted @ 2025-03-20 13:38  Devpp  阅读(11)  评论(0)    收藏  举报