#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); // IO加速,适配大数据量
int n;
cin >> n;
int cnt2 = 0, cnt3 = 0, cnt5 = 0; // 统计2、3、5的质因子总个数
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i];
int num = v[i];
// 分解质因子2,统计个数
while (num % 2 == 0) {
cnt2++;
num /= 2;
}
// 分解质因子3,统计个数
while (num % 3 == 0) {
cnt3++;
num /= 3;
}
// 分解质因子5,统计个数
while (num % 5 == 0) {
cnt5++;
num /= 5;
}
// 其他质因子无需处理
}
// 答案为三个质因子个数的最小值
int k = min({cnt2, cnt3, cnt5});
cout << k << endl;
return 0;
}
// 64 位输出请用 printf("%lld")
直接模拟会溢出,采用质因数分解的方法,对30取模就把30质因数分解成2,3,5,再看看每个数组中的元素包含多少个质因数,统计整个数组所包含的质因数个数,取这三种质因数的最小值,为什么是最小值呢?因为只有取最小才能保证含有k个2,3,5这样一定可以整除掉30,假设取最大则无法凑出多的30也就会有余数除不掉了。

京公网安备 11010502036488号