给定n个正整数,每个正整数都包含若干种质因子,现在小明想知道,这些质因子中,哪种质因子出现的次数最多(注意,每个数字中出现的每种质因子只统计一次)?C++
时间: 2024-03-23 22:36:47 浏览: 70
以下是C++代码实现:
```c++
#include <iostream>
#include <vector>
#include <unordered_set>
#include <map>
using namespace std;
int main() {
int n;
cin >> n;
vector<unordered_set<int>> nums(n); // 存储每个数字中的质因数
unordered_set<int> factors; // 存储所有数字中出现的质因数
map<int, int> counts; // 存储每种质因数出现的次数
for (int i = 0; i < n; i++) {
int num;
cin >> num;
for (int j = 2; j <= num; j++) {
while (num % j == 0) { // 如果num可以被j整除
nums[i].insert(j); // j是num的一个质因数
factors.insert(j); // 将j存入所有数字中出现的质因数中
num /= j; // 将num除以j
}
}
}
for (auto& factor : factors) { // 遍历所有数字中出现的质因数
int count = 0;
for (auto& num : nums) { // 遍历每个数字
if (num.count(factor) > 0) { // 如果该数字中包含该质因数
count++; // 该质因数出现次数加1
}
}
counts[factor] = count; // 将该质因数出现次数存入map中
}
int maxCount = 0;
int maxFactor = 0;
for (auto& count : counts) { // 遍历每种质因数出现的次数
if (count.second > maxCount) { // 如果该质因数出现次数大于目前最大出现次数
maxCount = count.second; // 更新最大出现次数
maxFactor = count.first; // 更新最大出现次数对应的质因数
}
}
cout << "出现次数最多的质因数是:" << maxFactor << ",出现次数为:" << maxCount << endl;
return 0;
}
```
输入n个正整数,程序遍历每个数字,将每个数字分解为质因数,将每个数字中出现的质因数存入vector中,将所有数字中出现的质因数存入unordered_set中,遍历unordered_set中的每个质因数,统计它在所有数字中出现的次数,并将次数存入map中。最后在map中找出出现次数最多的质因数,并输出其出现次数。
例如,当输入3个数字:12、15、18时,程序输出出现次数最多的质因数是:2,出现次数为:3。
阅读全文