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;
    
}
相关推荐
汉克老师21 分钟前
GESP 四级明日冲刺:最后一晚只抓两个大方向
c++·gesp·小学生·学c++编程
302wanger33 分钟前
蛋炒饭周刊 · 第 1 期(2026-09-07至2026-09-11)
算法
一木 之林43 分钟前
第 3 节 在 AI 行业中,C/C++ 编程中的动态库和静态库
c语言·c++·后端
库玛西44 分钟前
深度解构高并发利器:纯事件驱动 Reactor 模式的设计哲学与工程实践
服务器·开发语言·c++·笔记·tcp/ip
shehuiyuelaiyuehao1 小时前
算法43,外观数列,模拟算法+双指针
java·算法
linx2951 小时前
单元五 · 对称认知·下:编译与链接
linux·c语言·开发语言·c++·嵌入式硬件
alphaTao1 小时前
LeetCode 每日一题 2026/9/7-2026/9/13
算法·leetcode
kanhaoning1 小时前
Agent 记忆出现重复和矛盾怎么优化:我实测了6种去重和更新策略,找到了低成本维护记忆质量的方法
算法
hans汉斯1 小时前
【计算机科学与应用】层级评论上下文依赖识别数据集构建与研究——以小红书旅游评论数据为例
人工智能·算法·yolo·目标检测·cnn·旅游