当前位置: 首页 > news >正文

《CF912E Prime Gift》

题目描述

Opposite to Grisha's nice behavior, Oleg, though he has an entire year at his disposal, didn't manage to learn how to solve number theory problems in the past year. That's why instead of Ded Moroz he was visited by his teammate Andrew, who solemnly presented him with a set of n distinct prime numbers alongside with a simple task: Oleg is to find the k -th smallest integer, such that all its prime divisors are in this set.

输入格式

The first line contains a single integer n ( 1<=n<=16 ).

The next line lists n distinct prime numbers p1​,p2​,...,pn​ ( 2<=pi​<=100 ) in ascending order.

The last line gives a single integer k ( 1<=k ). It is guaranteed that the k -th smallest integer such that all its prime divisors are in this set does not exceed 1018 .

输出格式

Print a single line featuring the k -th smallest integer. It's guaranteed that the answer doesn't exceed 1018 .

隐藏翻译

题意翻译

给你 n 个互不相同的素数 p1​,p2​,⋯,pn​,它们组成一个集合 P。

请你求出第 k 小的正整数,满足:

  • 该数字的所有素因子 ∈P

1≤n≤16,2≤pi​≤100, 保证答案不超过 1018。

输入输出样例

输入 #1复制

3
2 3 5
7

输出 #1复制

8

输入 #2复制

5
3 7 11 13 31
17

输出 #2复制

93

说明/提示

The list of numbers with all prime divisors inside 2,3,5 begins as follows:

(1,2,3,4,5,6,8,...)

The seventh number in this list ( 1 -indexed) is eight.

代码实现:

#include <iostream>
#include <queue>
#include <set>
#include <vector>
using namespace std;

int main() {
    int n, k;
    cin >> n;
    
    vector<long long> primes(n);
    for (int i = 0; i < n; i++) {
        cin >> primes[i];
    }
    
    cin >> k;
    
    priority_queue<long long, vector<long long>, greater<long long> > pq;
    set<long long> generated;
    
    pq.push(1);
    generated.insert(1);
    
    for (int i = 0; i < k; i++) {
        long long current = pq.top();
        pq.pop();
        
        if (i == k - 1) {
            cout << current << endl;
            return 0;
        }
        
        // 使用迭代器遍历primes
        for (vector<long long>::iterator it = primes.begin(); it != primes.end(); ++it) {
            long long p = *it;
            long long nextNum = current * p;
            if (nextNum / p == current && generated.find(nextNum) == generated.end()) {
                pq.push(nextNum);
                generated.insert(nextNum);
            }
        }
    }
    
    return 0;
}

http://www.lqws.cn/news/93151.html

相关文章:

  • 破局与进阶:ueBIM 在国产 BIM 赛道的差距认知与创新实践
  • 默认网关 -- 负责转发数据包到其他网络的设备(通常是路由器)
  • 深度学习驱动的车牌识别:技术演进与未来挑战
  • C++:内存管理
  • JS对象——BOM
  • MySQL强化关键_019_索引优化
  • winrm登录失败,指定的凭据被服务器拒绝
  • 基于PyQt5的相机手动标定工具:原理、实现与应用
  • Python 数据分析与可视化实战:从数据清洗到图表呈现
  • Java IO
  • 黑马Java面试笔记之 集合篇(算法复杂度+ArrayList+)
  • WPS 利用 宏 脚本拆分 Excel 多行文本到多行
  • 题山采玉: Day1
  • 【AI Study】第三天,Python基础 - NumPy(1)
  • 【Redis】list 类型
  • 面向对象系统中对象交互的架构设计哲学
  • (四)动手实现多层感知机:深度学习中的非线性建模实战
  • OpenCV CUDA模块图像处理------双边滤波的GPU版本函数bilateralFilter()
  • 基于SDN环境下的DDoS异常攻击的检测与缓解
  • 二叉树day1
  • 如何使用插件和子主题添加WordPress自定义CSS(附:常见错误)
  • Linux系统-基本指令(5)
  • MQTTX连接阿里云的物联网配置
  • 00 Deep learning 之回归、拟合、逻辑回归
  • Nginx+Tomcat负载均衡集群
  • Oracle 故障实例 - 通过备份恢复到某时间点 故障恢复
  • 网络安全-等级保护(等保) 3-3 GB/T 36627-2018 《信息安全技术 网络安全等级保护测试评估技术指南》-2018-09-17发布【现行】
  • # 将本地UI生成器从VLLM迁移到DeepSeek API的完整指南
  • Unity异常上报飞书工具
  • 飞书常用功能(留档)