题目背景
译自 9th Romanian Master of Informatics, RMI 2021 D1T2。4s,0.5G。
题目描述
定义一个集合 S 是好的,当且仅当:
- S 为有限集合;
- S 中只包含正整数;
- ∀x,y∈S,都有 gcd(x,y)∈S。
注意到 ∅ 也是好的。
Laikan 序
定义好的集合 A,B 满足 A<B,当且仅当下列条件至少有一个成立:
- maxA<maxB;
- maxA=maxB∧A\{maxA}<B\{maxB}。
特别地,定义 max∅=−∞。
不难发现,对于好的集合 S,这总是良定义的。
你要将一个好的集合 S 作为礼物送给你的挚友。
由于你们已经分隔 k 天,你想要让这个礼物更有纪念意义。
于是,你将所有好的集合按照 Laikan 序 排序,得到一个无穷序列 S0,S1,⋯。你将要把 Sk 送给你的挚友。
你想要知道,你要送的集合里面的元素是什么。
输入格式
本题单个测试点内有多组测试数据。
第一行,一个正整数 T,表示测试数据组数。
接下来 T 组测试数据,每组测试数据包含一行一个整数 k。
输出格式
对于每组测试数据,输出一行。
第一个数,表示 ∣S∣。
接下来 ∣S∣ 个数,升序输出 S 中的元素。
提示
对于 100% 的数据,保证:
- 1≤T≤5;
- 0≤k≤1.5×109。
子任务编号 |
k≤ |
得分 |
1 |
102 |
8 |
2 |
106 |
21 |
3 |
5×108 |
41 |
4 |
109 |
14 |
5 |
1.5×109 |
16 |