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

A. Vasya and Petyas Game

https://codeforces.com/problemset/problem/576/A

题意:给定一个数x∈[1, n],然后猜测一个序列,我们可以在上交序列后,得知序列中的每个数y是否可以整除x,找出这个最短序列,可以让我们知道x是多少。

思路:这个序列中的数需要能够组合成任何[2,n]之间的数,这样我们对于任意的两个询问q1和q2,..qn,如果都能整除x,那么可能是q1q2..qn,如果有一个不能整除x,那么肯定不是x,所以我们需要预处理出所有的质因子,然后将单个质因子的幂组成的所有[1,n]的因子的集合列出来,就是ans。

总结:题目有两个关键点,第一个是意识到,我们给出的序列里的数,需要能够判定所有的[2,n]的可能的x,因为如果[2,n]中每个数都不满足x,那么答案是1,如果有数字能满足,那就在里面。
第二个点是,如何判定这个区间内的所有数?意识到每个数都能由若干个质因子相乘得到,先考虑质数,如果是质数,那么yes or no都可以在一次询问中得到。对于区间内的合数,判断它是否不是x,必须要先知道它的所有的质因子及其数量,再将质因子进行组合,就得到x了。。
有点抽象,就是假如有一个数t,我们判断它是不是我们要找的数,我们只要把x进行质因子分解,然后将相同的质因子进行相乘,得到若干个因子。然后我们询问这些因子能否整除x,如果有一个不能整除,那就寄。如果都能整除x,那答案就是t吗?不一定,假如t2在[1,n]区间内,还需要继续考虑后面的数字,因为x也可能是t2,t*2也满足t的所有质因子的条件。

这么看的话,正确的逻辑应该是,对[1,n]的每个数做质因子分解,然后记录每个质因子出现的最大次数,最后将这些质因子进行幂乘得到所有的因子集合..但是好像先线性筛所有的质因子,然后做幂成,不超过n的因子都要算进去,也是对的。

inline void solve() {primer.sievePrimes();auto primes = primer.getPrimesArray();int n;cin >> n;set<int> sett;for (const auto& p : primes) {if (p > n) {break;}long long cur = p;while (cur <= n) {sett.insert(cur);cur *= p;}}cout << sett.size() << "\n";for (auto v : sett) {cout << v << ' ';}
}
http://www.hskmm.com/?act=detail&tid=34862

相关文章:

  • Android Studio Archive | Android Studio 归档下载
  • 关系型数据库的基本理论
  • JAVA集合
  • 【最新推荐】分享十大常用又靠谱的文件摆渡系统
  • C语言实现LDPC码译码功能
  • 2025年10月中国试验机厂家推荐:十强榜单对比与性能评测
  • [NOIP 2012 提高组] 开车旅行 的AC代码
  • Voice Chat: Resolving Lag and Stuttering with a Jitter Buffer
  • 2025 年报警器经销商最新推荐榜单:全面剖析海湾、青鸟等品牌服务商优势,为您筛选优质可靠合作伙伴燃气 / 太阳能 / 交通道路报警器推荐
  • 结构体
  • 专栏导航:《数据中心网络与异构计算:从瓶颈突破到架构革命》 - 实践
  • 扫描线总结
  • 2025年10月抗老面霜推荐:小鸟传领衔五强对比评测榜
  • 基于STM32芯片通过CAN总线控制电机运动
  • 2025 酒店家具厂家最新推荐榜:北木斋领衔五大新锐品牌,品质与创新双优之选全解析
  • 文献阅读笔记格式
  • Stream流
  • JS中的值传递和引用传递
  • 基于Java+Springboot+Vue开发的母婴商城管理系统源码+运行步骤
  • 乐理和蜂鸣器的实现
  • CF1288C Two Arrays 分析
  • 流水线
  • 基于MATLAB的谐波分析实现方案
  • 一文详解 | 纷享销客CRM如何助力快消巨头蒙牛实现全场景数字化转型
  • AI生成代码系列:开源代码片段检测的有效方法
  • 基于进化算法的自动神经架构搜索
  • 【tinyusb】首次使用
  • 2025 年西安标志标识厂家最新推荐排行榜:聚焦西北优质服务商,精选实力企业助您精准选型
  • 打卡
  • 2025年10月豆包关键词排名优化服务推荐排行榜:十大服务商深度对比与评测指南