#6619. 编号回溯路径

编号回溯路径

编号回溯路径

题目描述

对于任意正整数 (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 的整数次幂。


某信息系统使用一条特殊规则,从当前编号不断向编号 0 回溯。

设当前编号为 (p),一次回溯后得到的新编号为:

pF(p)p-F(p)

系统会反复执行上述操作,直到当前编号变为 0

给定初始编号 (x),请按照访问顺序输出整个回溯过程中出现的所有编号,包括初始编号 (x) 和最终编号 0


输入格式

输入一个正整数:

x

表示初始编号。


输出格式

在一行中按照访问顺序输出所有编号。

相邻两个编号之间用一个空格分隔,并且最后一个输出的编号必须是:

0

数据范围

对于所有测试数据:

1 ≤ x ≤ 10^9

样例输入 1

13

样例输出 1

13 12 8 0

样例解释

初始编号为:

1313

能够整除 13 的最大的 2 的整数次幂是:

F(13)=1F(13)=1

所以第一次回溯后:

131=1213-1=12

此时当前编号变为 12


对于 12

F(12)=4F(12)=4

所以第二次回溯后:

124=812-4=8

此时当前编号变为 8


对于 8

F(8)=8F(8)=8

所以第三次回溯后:

88=08-8=0

到达编号 0,回溯结束。

因此完整路径为:

13 → 12 → 8 → 0

输出:

13 12 8 0

样例输入 2

20

样例输出 2

20 16 0

样例解释

对于 20

F(20)=4F(20)=4

因此:

204=1620-4=16

对于 16

F(16)=16F(16)=16

因此:

1616=016-16=0

完整路径为:

20 → 16 → 0