输入描述 输入数据共两行。第一行包含一个整数n,表示数字个数。 第二行包含以空格隔开的n个整数,每个数字在2~100000之内。 输出描述 输出一个正整数,表示出现最多的质因子,如果有多个质因子出现一样多,输出最小的那一个。 样例1 输入 4 2 6 8 10 输出 2 提示 1 <= n <= 1000。 C++C++
时间: 2024-03-23 15:36:49 浏览: 65
我们第一行包括两个整数n,k(1<=n<=100,k<=6e5),表示有n个数字,目标和为k 第二行输入n个整数(c1 c2
以下是C++代码实现:
```c++
#include <iostream>
#include <vector>
#include <unordered_set>
#include <map>
using namespace std;
bool isPrime(int n) { // 判断一个数是否为质数
if (n < 2) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
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的一个质因数
if (isPrime(j)) { // 如果j是质数
factors.insert(j); // 将j存入所有数字中出现的质因数中
}
num /= j; // 将num除以j
}
}
}
int maxCount = 0;
int maxFactor = 0;
for (auto& factor : factors) { // 遍历所有数字中出现的质因数
int count = 0;
for (auto& num : nums) { // 遍历每个数字
if (num.count(factor) > 0) { // 如果该数字中包含该质因数
count++; // 该质因数出现次数加1
}
}
if (count > maxCount) { // 如果该质因数出现次数大于目前最大出现次数
maxCount = count; // 更新最大出现次数
maxFactor = factor; // 更新最大出现次数对应的质因数
} else if (count == maxCount && factor < maxFactor) { // 如果该质因数出现次数等于目前最大出现次数,且该质因数比最大质因数还小
maxFactor = factor; // 更新最大质因数
}
}
cout << maxFactor << endl;
return 0;
}
```
输入n个正整数,程序遍历每个数字,将每个数字分解为质因数,将每个数字中出现的质因数存入vector中,将质数存入unordered_set中,遍历unordered_set中的每个质因数,统计它在所有数字中出现的次数,找出出现次数最多的质因数,并输出其值。
例如,当输入4个数字:2、6、8、10时,程序输出2。
阅读全文