思路:

  1. 预处理出每个数字的质因子集合。

  2. 统计每种质因子出现次数,取出现次数最多的质因子。

  3. 如果有多个质因子出现次数相同,输出最小的那个。

关键点:

  1. 如何预处理质因子集合?

可以先预处理出每个数的最小质因子,然后用类似于埃氏筛法的方式,逐个去掉这些质因子,得到整个质因子集合。

  1. 如何统计质因子出现次数?

可以用一个 'unordered_map<int, int>',记录每种质因子出现的次数。

  1. 如何取出现次数最多的质因子?

可以用一个变量 'maxCnt' 记录出现次数最多的质因子出现次数,然后遍历 'unordered_map',取出出现次数等于 'maxCnt' 的质因子中最小的那个。

代码:

// 以下代码示例仅供参考,具体实现可能需要根据实际情况进行调整
#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
    int n;
    cin >> n;
    int nums[n];
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }

    unordered_map<int, int> factorCount;
    for (int i = 0; i < n; i++) {
        int num = nums[i];
        // 预处理质因子集合
        for (int j = 2; j * j <= num; j++) {
            while (num % j == 0) {
                factorCount[j]++;
                num /= j;
            }
        }
        if (num > 1) {
            factorCount[num]++;
        }
    }

    // 寻找出现次数最多的质因子
    int maxCnt = 0;
    int maxFactor = -1;
    for (auto it = factorCount.begin(); it != factorCount.end(); it++) {
        if (it->second > maxCnt) {
            maxCnt = it->second;
            maxFactor = it->first;
        } else if (it->second == maxCnt && it->first < maxFactor) {
            maxFactor = it->first;
        }
    }

    cout << maxFactor << endl;
    return 0;
}
C++ 算法:寻找出现次数最多的质因子

原文地址: https://www.cveoy.top/t/topic/oxPR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录