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;
    
}
相关推荐
飞Link2 小时前
什么是 AirSim?一文读懂无人机仿真平台
python·算法·无人机
xiaoye-duck4 小时前
《C++ 工具库实战》gflags 命令行参数解析库详解
c++·第三方库
一去不复返的通信er4 小时前
贪心算法-合并区间(LeetCode 56)
算法·leetcode·贪心算法
狂奔的sherry5 小时前
C++ 宏生成访问函数的代价:访问权限、调试和类型检查
c++·宏·编译·预处理器·类型检查
Shaoshing5 小时前
LeetCode100 49. 字母异位词分组
java·算法
YFJ_mily5 小时前
第二届区块链技术与基础模型国际学术会议(BTFM2027)
算法·区块链·能源·智能系统·rdlink研发家·机器人自动化
汤姆宝库6 小时前
收官深拆:第一性原理、产业电网与未来推演
大数据·人工智能·算法
划破黑暗的第一缕曙光6 小时前
[C++]:5.STL:string(2)
java·c++·redis
moshuying8 小时前
块扩散 + GDN 改造:Clover 把「并行生成」塞进了 Agent 的长上下文里
前端·算法