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

P15548 题解

题目传送门

分析:

题目要求需要让 \(\Omega(x)\) 最小,所以构造的每个数 \(x\) 必须得在质因子个数最少的情况下,和其他数要有至少 \(n - 1\) 个不同的 \(\gcd\)

怎么才能得到这么多种 \(\gcd\)?让 \(x\) 的每个质因子都两两不同。只有这样构造才能在 \(x\) 的质因子中取任意多个,得到的积是两两不同的。不难发现组合方案一共有 \(2^{\Omega(x)}\) 种,那么输出的第一行至少为 \(\left\lceil\log_2n\right\rceil\)

但题目要求是对于任意 \(x\) 都满足上述条件。那么如何构造一种满足条件的方案呢?

先考虑 \(n = 2^k\),那么每个数都由 \(k\) 个互不相同的质数的乘积组成。我们设如果第 \(i\) 个数第 \(j\) 个质因子不等于第 \(1\) 个数第 \(j\) 个质因子,\(s_{i,j} = 1\),否则 \(s_{i,j} = 0\)。那么可以得到 \(s_2 = 0000...01\)\(s_3 = 0000...10\),以此类推,\(s_n = 1111...11\)

通过仔细观察,我们发现:如果字符串第 \(j\) 个字符为 1 时表示一个质数,为 0 时表示另一个质数,那么问题就能完美解决。因为这样每个 \(x\) 和其他数 \(y\)\(\gcd\) 也能用上述的二进制字符串来表示,而 \(s_i\) 是两两不同的,那么所得的 \(\gcd\) 也是两两不同的。

如果 \(n \neq 2^k\),我们设 \(m\)\(> n\) 且能表示为 \(2^k\) 的最小的数,那么我们按照上述的方式构造出 \(m\) 个数,然后只输出前 \(n\) 个数就可以了。

但是构造的每个数不能超过 \(3 \times 10^{17}\)。为了让最大值尽可能小,将 \(s_{i,j} = 1\) 时乘上第 \(2 \times j - 1\) 个质数,否则乘上第 \(2 \times j\) 个质数。这样构造的好处在于比较小的质数都能得到充分利用。

这个做法是 \(73\) 分的,为什么?因为当 \(m = 4096\) 时,最后一个数略比 \(3 \times 10^{17}\) 大,会超。但是发现这距离题目要求 \(3 \times 10^{17}\) 差距不大,所以我们将构造的 \(m\) 个数从小到大排序,最后一个数的大小只有 \(2.91 \times 10^{17}\),就能满足题目所给条件了。


#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#define int long long
#define lowbit(x) x&(-x)
using namespace std;
int n,w,a[2000005],b[2000005],y = 1;
struct node
{int fs[406];
}ed[4106];
bool cmp(node e,node f)
{__int128 x = 1,y = 1; for(int i = 1;i <= w;i ++){x *= (__int128)e.fs[i],y *= (__int128)f.fs[i];}return x < y;
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0),cout.tie(0); cin >> n;w = ceil(log2(n));cout << w << endl;for(int i = 2;i <= 1000000;i ++)//取前2*n个质数{if(a[i] == 0)b[y ++] = i;for(int j = 1;i * b[j] <= 1000000 && j < y;j ++){a[i * b[j]] = 1;if(i % b[j] == 0)break;}}int dk = n;while(ceil(log2(dk)) != floor(log2(dk)))dk ++;for(int i = 1;i <= dk;i ++)for(int j = 1;j <= w;j ++){if((i >> (j - 1)) & 1)ed[i].fs[j] = b[j * 2 - 1];else ed[i].fs[j] = b[j * 2];}sort(ed + 1,ed + dk + 1,cmp);//按数的大小排序for(int i = 1;i <= n;i ++)//输出方案{cout << w << ' ';for(int j = 1;j <= w;j ++)cout << ed[i].fs[j] << " ";cout << '\n';}
}
http://www.jsqmd.com/news/481127/

相关文章:

  • 人,有了物质才能生存;人,有了理想才谈得上生活
  • 中小企业别再只靠爆款和运气!真正盈利增长需要体系化变革-佛山鼎策创局破局增长咨询
  • 2026年江苏机器外壳钣金加工厂费用分析,哪家价格更合理 - mypinpai
  • 无人机岔路口车辆巡检数据集 城市交通流监测识别 自动驾驶车辆感知检测 低空航拍目标识别 交通违章识别 无人机数据集YOLO第10560期
  • 盘点2026年江苏机械加工品牌,常州布恩机械的市场竞争力强吗 - 工业设备
  • QT编程(12): QDragEvent事件
  • 2026最新!AI论文写作软件 千笔AI VS 灵感ai,全领域适配首选
  • CF862E 题解
  • 学霸同款!普遍认可的AI论文网站 —— 千笔·专业论文写作工具
  • 2026年酒泉戈壁徒步公司口碑排名,靠谱品牌有哪些 - 工业品网
  • 一文讲透|全行业通用降AIGC工具 —— 千笔
  • 深圳区域起重机安装资质办理,亨通靠谱服务排名前列 - myqiye
  • 交稿前一晚!9个降AI率软件降AIGC网站评测对比,全行业通用必看
  • 南京高功率密度电源定制,2026年这些源头厂家有优势,氢能源车载直流转换器/辅助应急电源,高功率密度电源品牌哪个好 - 品牌推荐师
  • 说说上海专业的企业法律在线咨询机构,哪家口碑更好 - 工业品牌热点
  • 毕业论文神器 8个一键生成论文工具:开源免费测评+高效写作推荐
  • 直线轴承品牌新动态:2026年值得关注的品牌,直线轴承排行榜技术领航者深度解析 - 品牌推荐师
  • 深度解析:2026年国内伺服印刷机定制服务哪家强?,目前耐用的伺服印刷机哪家权威优质品牌选购指南 - 品牌推荐师
  • 赶deadline必备 AI论文写作软件 千笔AI VS 灵感ai
  • 爬虫测试:单元测试与集成测试实践
  • 交稿前一晚!千笔AI,开源免费降重神器
  • 服务器部署爬虫:Supervisor 进程守护
  • 好用还专业!8个降AI率工具全领域适配测评与推荐
  • 国产智驾SoC全面突围:从低算力替代到高算力量产的技术跃迁
  • 数字化研发核心引擎:2026年主流需求管理软件竞争格局与趋势解析 - 品牌推荐
  • 汽车与机器人领域的“全脑”计算平台引领者
  • 第二部分 主体间性与DOS三值纠缠:关系哲学的双重维度
  • 第四部分 公共领域与星图舞台:多元协商的空间条件
  • 华为OD机考双机位C卷 - 打印机队列 (Java)
  • AtCoder Weekday Contest 0022 Beta题解(AWC 0022 Beta A-E)