CF922F Divisibility
题目描述
Imp 非常高兴你帮助了他。但如果你能解决最后一个问题,他会更加开心。

我们定义对于某个整数集合 $S$,$f(S)$ 表示集合 $S$ 中满足以下条件的有序对 $(a, b)$ 的数量:
- $a$ 严格小于 $b$;
- $a$ 能整除 $b$(即 $b$ 除以 $a$ 没有余数)。
请你找到一个 $S$,它是 $\{1,2,\ldots,n\}$ 的子集,且 $f(S)=k$。
输入格式
输入仅一行,包含两个整数 $n$ 和 $k$,$2 \leq n \leq 3\times 10^5$,$1 \leq k \leq \min(10^9,\frac{n(n-1)}{2})$。
输出格式
如果不存在这样的集合,输出 "No"。
否则,第一行输出 "Yes"。第二行输出一个整数 $m$,表示你找到的集合 $S$ 的大小。第三行输出 $m$ 个整数,表示集合 $S$ 的元素,顺序任意。
如果有多组答案,输出任意一组均可。
说明/提示
在第二个样例中,输出集合中满足条件的有序对为 $(1,2)$、$(1,4)$、$(1,5)$、$(1,6)$、$(2,4)$、$(2,6)$,因此 $f(S) = 6$。
在第三个样例中,输出集合中满足条件的有序对为 $(2,4)$、$(4,8)$、$(2,8)$,因此 $f(S) = 3$。
由 ChatGPT 4.1 翻译