kotori 拿到 n 个互不相同的正整数 a_1,a_2,...,a_n 。她要从每个 a_i 中选出一个素因子 p_i ,要求所有选出的素因子两两不同,即 p_i≠ p_j(i≠ j) 。 若无法满足要求输出 -1 ;否则输出所有选出的素因子之和 Σ_i=1^np_i 的最小可能值。
第一行输入整数 n(1≤ n≤ 10) 。 第二行输入 n 个两两不同的整数 a_i(2≤ a_i≤ 1000) 。
若存在合法选取方案,输出最小可能和;否则输出 -1 。
4 12 15 28 22
17
5 4 5 6 7 8
-1
考点:数论
数据规模 n ≤ 10 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:数论
围绕整除、质因数、同余的经典结论与筛法。
思路框架(数论 通法 · 非本题专属)
实现要点:模运算规律:(a+b)%m = ((a%m)+(b%m))%m,乘法则同理;减法要 +m 防止负数。
复杂度:时间 O(√n) 分解 / O(n log log n) 筛 | 空间 O(n) 筛表
该范式的通法易错点
对照本题
样例 1:输入 4 / 12 15 28 22 → 输出 17
可取素因子 [3,5,7,2] ,和为 17 ;任意合法方案的和都不小于 17 。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:华为机试编程模拟题7。