C++给定n个正整数每个正整数都包含若干种质因子现在小明想知道这些质因子中哪种质因子出现的次数最多注意每个数字中出现的每种质因子只统计一次?输入描述:输入数据共两行。第一行包含一个整数n表示数字个数。第二行包含以空格隔开的n个整数每个数字在2~100000之内。输出描述:输出一个正整数表示出现最多的质因子如果有多个质因子出现一样多输出最小的那一个。
思路:
-
预处理出每个数字的质因子集合。
-
统计每种质因子出现次数,取出现次数最多的质因子。
-
如果有多个质因子出现次数相同,输出最小的那个。
关键点:
- 如何预处理质因子集合?
可以先预处理出每个数的最小质因子,然后用类似于埃氏筛法的方式,逐个去掉这些质因子,得到整个质因子集合。
- 如何统计质因子出现次数?
可以用一个 unordered_map<int, int>,记录每种质因子出现的次数。
- 如何取出现次数最多的质因子?
可以用一个变量 maxCnt 记录出现次数最多的质因子出现次数,然后遍历 unordered_map,取出出现次数等于 maxCnt 的质因子中最小的那个。
代码:
原文地址: https://www.cveoy.top/t/topic/gIOl 著作权归作者所有。请勿转载和采集!