这里是wiki上的Josephus problem
我遇到的问题是这个的线性变化,但为了清楚起见,我将重述整个问题。
(数字=自然数)
有一个过程正在以以下方式消除数字:

i=2
while 1:
    remove numbers that are *placed* at positions divisible by i
    i+=1

你也会得到一个数字K,你必须确认这个数字K是否会在排除后继续存在。
例如(假设指数从0开始)
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ...
0,1,2,3,4,5,6,7,8, 9,10,11,12,13,14,15 ...  (indices)

After step 1 ( elimination at i=2 )
2,4,6,8,10,12,14,16 ...
0,1,2,3, 4, 5, 6, 7 ... (indices)

After step 2 (elimination at i=3 )
2,4,6,10,12,16 ... ( 8 and 14 got removed cause they were at index 3 and 6 resp. )
0,1,2, 3, 4, 5 ... (indices)

在这一步之后,我们可以看到2,4,6是safe的,因为这个过程将选择越来越高的值进行消除。
所以再一次,给定一个K如何确定K是否会safe

最佳答案

这个问题并不能说明0位置的数字到底发生了什么在本例中,在步骤1,数字1(在位置0处)被消除。但在第2步,数字2(在位置0)仍然存在。
为了得到这个答案,我假设这个例子是错误的,0位置的数字总是存在的。所以这个例子应该是这样的:
初始位置

 Number    1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 ...
 Position  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 ...

步骤1之后:
 Number    1  2  4  6  8 10 12 14 16 18 20 22 24 26 28 30 32 ...
 Position  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 ...

步骤2之后:
 Number    1  2  4  8 10 14 16 20 22 26 28 32 34 38 40 44 46 ...
 Position  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 ...

这导致序列1,2,4,8,14,20,28,40,…即not found in OEIS(但见下文附录)。
以下是在不计算整个序列的情况下,如何确定特定数字k是否存在的方法:
设j_=k−1(k的初始位置)。
如果j_>0和2 j_,则在步骤1中消除k,但如果不消除,则其新索引为j_=j_–j_/2
在步骤2,如果Jü>0和3 Jü,则K被消除,但如果不是,则其新索引为J_=Jü–Jü/3
以此类推,直到k被消除,或者直到ji附录
当我断定这个序列不在oeis中时,我有点仓促。假设我们把位置从1开始编号,而不是从0开始。然后我们得到序列1,3,7,13,19,27,39,…这是“弗拉维斯·约瑟夫斯筛”。不过,仍然没有封闭形式的解决方案。

10-08 08:33