Codeforces Round 903 (Div. 3) Editorial - Codeforces
补题:
D:
为了解决这个问题,我们需要将数组中的所有数字分解为素因子。之后,让我们计算每个除数的数量,总结所有数字的分解。如果每个除数进入 $k\cdot n$ 次,其中 $k$ 是自然数,
然后,我们可以均衡数组中的所有数字:我们将按顺序应用该操作,以便每个数字都由相同的素数DIV集合组成伊索尔斯。如果某个除数输入的次数不同,则不可能使数组中的数字相等。
代码实现:
#include<bits/stdc++.h>
using namespace std;
const int maxv = 1000000;
void add_divs(int x, map<int, int>&divs){ //在map的元素名前加& 则可使map可在自定义函数中被改变
int i = 2;
while(i * i <= x){
while (x % i == 0){
divs[i]++;
x /= i;
}
i++;
}
if(x > 1) divs[x]++;
}
//把x分解为因数 并且在第二个whie存在的情况下 分解得到的因数一定是质数 用divs来存储该因数的个数
bool solve(){
int n;
cin >> n;
vector<int>a(n);
map<int, int> divs;
for(int i = 0; i < n; i++) {
cin >> a[i];
add_divs(a[i], divs);
}
for(auto e: divs){ //e来表示divs中的已经存入的所有元素
if(e.second % n != 0) return false; //e.second表示map<int,int>中的第二个int
}
return true;
}
int main(){
int t;
cin >> t;
while(t--) {
cout << (solve() ? "YES" : "NO") << "\n";
}
}