#6719. 二进制管理员

二进制管理员

二进制管理员

题目描述

在某个数据管理系统中,每一个数据节点都有一个编号。

系统规定:

一个节点负责管理的数据数量,取决于它编号的二进制表示中最低位的 1 所代表的数值

对于一个正整数 x,定义:

lowbit(x)=x&(x)lowbit(x)=x\&(-x)

其中:

  • & 表示按位与运算;
  • -x 表示 x 的补码形式。

例如:

节点编号:

12

它的二进制表示为:

1100

其中最低位的 1 为:

0100

对应的数值为:

4

因此:

节点 12 可以管理的数据数量为:

4

现在系统需要进一步分析该节点负责的数据。

请你完成以下任务:

  1. 计算节点编号 x 所管理的数据数量 k
  2. 找出 k 的所有因数;
  3. 将所有因数按照从大到小的顺序输出。

例如:

输入:

12

计算得到:

k = 4

4 的所有因数为:

1 2 4

按照从大到小排序后:

4 2 1

输入格式

输入一个整数:

x

表示节点编号。


输出格式

第一行输出:

k

表示该节点管理的数据数量。

第二行输出:

k 的所有因数,按照从大到小排列。

相邻数字之间使用一个空格隔开。


输入范围

1 ≤ x ≤ 10^9

保证 x 为正整数。


输入样例

12

输出样例

4
4 2 1

样例解释

节点编号:

12

二进制:

1100

最低位的 1

0100

所以:

k = 4

4 的因数:

1 2 4

按照从大到小输出:

4 2 1