HJ154 kotori和素因子

  • 题目
  • 题解(43)
  • 讨论(12)
  • 排行

中等 通过率:43.74% 时间限制:1秒 空间限制:256M

知识点数论数学

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

kotori 拿到 nn 个互不相同 的正整数 a1,a2,...,ana1​,a2​,...,an​。她要从每个 aiai​ 中选出一个素因子 pipi​,要求所有选出的素因子两两不同,即 pi≠pj  (i≠j)pi​​=pj​(i​=j)。

若无法满足要求输出 −1−1;否则输出所有选出的素因子之和 ∑i=1npii=1∑n​pi​ 的最小可能值。

输入描述:

第一行输入整数 n(1≦n≦10)n(1≦n≦10)。

第二行输入 nn 个两两不同的整数 ai(2≦ai≦1000)ai​(2≦ai​≦1000)。

输出描述:

若存在合法选取方案,输出最小可能和;否则输出 −1−1。

示例1

输入:

复制代码
4
12 15 28 22

复制输出:

复制代码
17

复制说明:

复制代码
可取素因子 [3,5,7,2][3,5,7,2],和为 1717;任意合法方案的和都不小于 1717。

示例2

输入:

复制代码
5
4 5 6 7 8

复制输出:

复制代码
-1
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int n;
int a[1010];//正整数的值
int mi=1e9;
//判断是否为质数
bool primer(int x){
   for(int i=2;i*i<=x;i++){
       if(x%i==0){
           return false;
       }
   }
    return true;
}
void dfs(int x,set<int> s,int temp){
    if(x==n){
        mi=min(mi,temp);
        return;
    }
    for(int i=2;i<=a[x];i++){
        if(a[x]%i==0 && primer(i)&&!s.count(i)){
            s.insert(i);
            dfs(x+1,s,temp+i);
            s.erase(i);
        }
    }
}
int  main(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    set<int> s;
    dfs(0,s,0);
    if(mi==1e9)cout<<-1;
    else cout<<mi;
    return 0;
    
}
相关推荐
JieE2121 天前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2122 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack203 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树3 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2123 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2123 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术4 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦4 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
clint4564 天前
C++进阶(1)——前景提要
c++