为正整数n定义函数f(n),如下所示:
- n / 2,如果n是偶数
- 3 * n +1,如果n为奇数
如果您将此功能重复应用到任何 大于0的 n,则结果似乎总是收敛到1(尽管尚无人能够证明这一点)。此属性称为Collatz猜想。
将整数的停止时间定义为必须通过Collatz函数f传递它的次数。达到1之前必须。这是前15个整数的停止时间:
1 0
2 1
3 7
4 2
5 5
6 8
7 16
8 3
9 19
10 6
11 14
12 9
13 9
14 17
15 17
让我们用相同的停止时间呼叫任何一组数字 Collatz表兄弟的数字。例如,5和32是Collatz表兄弟,停止时间为5。
您的任务:编写一个程序或函数,该程序或函数采用一个非负整数并生成一组Collatz表兄弟,其停止时间等于该整数。
输入项
通过STDIN,ARGV或函数参数指定的非负整数S。
输出量
它的停止时间是S所有的数字列表,排序中升序的顺序。该列表可以由您的程序输出,也可以由您的函数返回或输出。输出格式是灵活的:只要数字之间可以容易地区分,空格就可以了,换行符可以换行,或者您的语言的任何标准列表格式都可以。
要求
对于任何S≤30,您的提交必须给出正确的结果。它应在几秒钟或几分钟内完成,而不是几小时或几天。
例子
0 -> 1
1 -> 2
5 -> 5, 32
9 -> 12, 13, 80, 84, 85, 512
15 -> 22, 23, 136, 138, 140, 141, 150, 151, 768, 832, 848, 852, 853, 904, 906, 908, 909, 5120, 5376, 5440, 5456, 5460, 5461, 32768
这是S = 30的输出要点。
这是代码高尔夫:以字节为单位的最短程序获胜。祝好运!