题库练习 子集枚举
← 上一题 下一题 →

A6465 | 子集枚举

时间限制1s
内存限制128MB
通过 / 提交0/0

题目描述

给定一个非负整数 $N$。请按从小到大的顺序输出所有满足以下条件的非负整数 $x$。

* 将 $x$ 和 $N$ 写成二进制表示时,$x$ 中为 $1$ 的那些二进制位(位置)的集合,必须是 $N$ 中为 $1$ 的那些二进制位(位置)的集合的子集。

* 也就是说,对任意非负整数 $k$,如果 $x$ 在 $2^k$ 位上的数字是 $1$,那么 $N$ 在 $2^k$ 位上的数字也必须是 $1$。


### 数据范围

- $N$ 是整数。
- $0 \le N < 2^{60}$
- 在 $N$ 的二进制表示中,最多有 $15$ 个数位包含 $1$ 。

输入格式

输入内容由标准输入法提供,格式如下


$N$

输出格式

将答案按升序打印为十进制整数,每行一个。

输入输出样例

输入 #1
11
输出 #1
0
1
2
3
8
9
10
11
输入 #2
0
输出 #2
0
输入 #3
576461302059761664
输出 #3
0
524288
549755813888
549756338176
576460752303423488
576460752303947776
576461302059237376
576461302059761664
C++ 编辑器
输入
输出