D. Divide and Equalize

黑屿白發表於2024-06-02

題解

我們只需要將每個數拆成質因數相乘的形式,然後對每個質因數累加,最後觀察每個質因數出現的次數是不是陣列長度的整數倍即可。

code

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int a[N];
map<int ,int > map1;
bool ss(int m){
    for (int i=2;i<=sqrt(m)+1;i++){
        if (m%i==0) return false;
    }
    return true;
}
void chai_x(int m){
    int i=2;
    if (ss(m)){
        map1[m]++;
        return;
    }
    while (m!=1){
        if (m%i==0){
            map1[i]++;
            m/=i;
        }
        else i++;
    }
}
int main(){
//    freopen("input.txt","r",stdin);
    int t;
    cin>>t;
    while (t--){
        int n;
        cin>>n;
        for (int i=1,x;i<=n;i++){
            cin>>x;
            if (x==1) continue;
            chai_x(x);
        }
        bool bol=true;
        for (auto it : map1){
            if ((it.second)%n!=0){
                bol=false;
                break;
            }
        }
        if (bol) cout<<"YES\n";
        else cout<<"NO\n";
        map1.clear();
    }
    return 0;
}