#6620. 编号扩散路径

编号扩散路径

编号扩散路径

题目描述

对于任意正整数 (x),定义函数 (F(x)) 满足:

  • (F(x)) 是 2 的整数次幂;
  • (F(x)) 能够整除 (x);
  • 在满足上述条件的所有整数中,(F(x)) 的值最大。

例如: F(12)=4F(12)=4 因为: 12=3×412=3\times 4 其中 (4=2^2),是能够整除 12 的最大的 2 的整数次幂。


某信息系统中共有 (n) 个编号,编号依次为:

1,2,3,……,n

系统从编号 (x) 开始传播一条更新信息。

设当前编号为 (p),信息传播到下一个编号的规则为: p+F(p)p+F(p) 系统会不断按照上述规则传播,直到得到的下一个编号大于 (n) 为止。

给定编号总数 (n) 和起始编号 (x),请按照传播顺序输出所有能够接收到更新信息的编号。


输入格式

输入两个正整数:

n x

其中:

  • (n) 表示编号总数;
  • (x) 表示传播的起始编号。

输出格式

在一行中,按照传播顺序输出所有接收到更新信息的编号。

相邻两个编号之间用一个空格分隔。

不需要输出第一个大于 (n) 的编号。


数据范围

对于所有测试数据:

1 ≤ x ≤ n ≤ 10^9

样例输入 1

16 5

样例输出 1

5 6 8 16

样例解释

初始编号为: 5

能够整除 5 的最大的 2 的整数次幂为:

F(5)=1

因此下一个编号为:

5+1=6

当前编号变为 6

因为: F(6)=2 所以下一个编号为: 6+2=86+2=8

当前编号变为 8。 因为: F(8)=8F(8)=8 所以下一个编号为: 8+8=168+8=16

当前编号变为 16

因为: F(16)=16F(16)=16 所以下一个编号为: 16+16=3216+16=32 但: 32>1632>16 已经超出编号范围,因此传播结束。

完整传播路径为:

5 → 6 → 8 → 16

所以输出:

5 6 8 16

样例输入 2

10 7

样例输出 2

7 8

样例解释

对于 7F(7)=1F(7)=1 因此: 7+1=87+1=8

对于 8

F(8)=8

因此:

8+8=168+8=16 由于:

16>1016>10

传播结束。

所以输出:

7 8