題解
我們只需要將每個數拆成質因數相乘的形式,然後對每個質因數累加,最後觀察每個質因數出現的次數是不是陣列長度的整數倍即可。
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; }