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;
    
}
相关推荐
我不是懒洋洋44 分钟前
从零实现一个分布式计算:MapReduce的核心设计
c++
aaaameliaaa8 小时前
字符函数和字符串函数
c语言·笔记·算法
城管不管9 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
月疯9 小时前
二分法算法(水平等分图形面积)
算法
豆瓣鸡10 小时前
算法日记 - Day3
java·开发语言·算法
白白白小纯10 小时前
算法篇—反转链表
c语言·数据结构·算法·leetcode
Achou.Wang10 小时前
深入理解go语言-第5章 并发编程——Go的灵魂
大数据·算法·golang
The Chosen One98510 小时前
高进度算法模板速记(待完善)
java·前端·算法
小王C语言11 小时前
【7. 实现登录注册模块】:实现会话管理、注册/登录/退出 API
网络·c++
土豆.exe13 小时前
Fastjson2 2.0.53 哈希碰撞 RCE:从原理到三种打法
算法·哈希算法