要知道的事情:
首先,幸运数字。
幸运数字生成如下:
取所有自然数:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20...
然后,删除每个第二个数字。
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39...
现在,3
很安全。
删除每第三个数字:
1, 3, 7, 9, 13, 15, 19, 21, 25, 27, 31, 33, 37, 39, 43, 45, 49, 51, 55, 59...
现在,7
很安全。
删除每7个数字。
继续,并删除每个n
数字,其中n
是消除后的第一个安全数字。
安全号码的最后列表是幸运数字。
不幸的数字由单独的数字列表组成,即[U1, U2, U3... Un]
。
U1
是从幸运“候选人”中删除的第一组数字,因此它们是:
2, 4, 6, 8, 10, 12, 14, 16, 18, 20...
U2
是删除的第二组数字:
5, 11, 17, 23, 29, 35, 41, 47, 53, 59...
依此类推(U3
是第三个列表,U4
是第四个列表,依此类推)
挑战:
当给定两个输入m
和时n
,您的任务是m
在列表中生成第th个数字Un
。
输入和输出示例:
(5, 2) -> 29
(10, 1) -> 20
眼镜:
- 为你的程序必须工作
m
达1e6
,和n
达100
。- 您可以保证
m
和n
均为正整数。 - 如果您好奇,请
U(1e6, 100)
=5,333,213,163
。(谢谢@pacholik!)
- 您可以保证
- 您的程序必须在一台合理的现代计算机上在1天之内进行计算。
这是代码高尔夫球,因此以字节为单位的最短代码胜出!
PS:如果有人想出了生成这些的通用公式,那就太好了。如果您有公式,请在答案中填写!
(1e6,1e6)
?
n=1
情况是否可以接受?由于这很特殊-在所有其他情况下,下一个幸运数字的从0开始的索引为n-1
。