#include #include #include <unordered_map> using namespace std;

// 判断一个数是否是质数 bool isPrime(int num) { if(num < 2) return false; for(int i = 2; i <= sqrt(num); i++) { if(num % i == 0) return false; } return true; }

// 获取一个数的所有质因子 vector getPrimeFactors(int num) { vector factors; for(int i = 2; i <= sqrt(num); i++) { if(num % i == 0) { factors.push_back(i); while(num % i == 0) num /= i; } } if(num > 1) factors.push_back(num); return factors; }

int main() { int n; cin >> n; unordered_map<int, int> count; // 记录每个质因子出现的次数 int maxCount = 0; // 记录出现次数最多的质因子的出现次数 int maxFactor = 0; // 记录出现次数最多的质因子 for(int i = 0; i < n; i++) { int num; cin >> num; vector factors = getPrimeFactors(num); for(int factor : factors) { count[factor]++; if(count[factor] > maxCount) { maxCount = count[factor]; maxFactor = factor; } else if(count[factor] == maxCount && factor < maxFactor) { maxFactor = factor; } } } cout << maxFactor << endl; return 0;

C++ 代码给定n个正整数每个正整数都包含若干种质因子现在小明想知道这些质因子中哪种质因子出现的次数最多注意每个数字中出现的每种质因子只统计一次?输入描述输入数据共两行。第一行包含一个整数n表示数字个数。第二行包含以空格隔开的n个整数每个数字在2~100000之内。输出描述输出一个正整数表示出现最多的质因子如果有多个质因子出现一样多输出最小的那一个。

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

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