约瑟夫问题
准备了下初赛,然而发现有好多约瑟夫问题都不会...
首先是明确一下问题及其细节.
问题是有(n)个人,从(0)开始标号(这样接下来的运算会比较方面,因为%%%),围成环状,数到第(k)个人就杀掉,再继续数数,问最后留下的是哪个人.
(k=2)的特殊情况.
我们考虑一轮杀下来,再重新编号的话.
如果(n\%2==0),重新标号后位置为(x)的人就是
原来标号为(x imes 2)的人
否则((n\%2==1)),重新标号后位置为(x)的人就是原来表还为(x imes 2+2)的人.
由此得出递推式
[f(n)=2 imes f(n/2)(n\%2==0)
]
[f(n)=2 imes f(lfloor n/2
floor)+2(n\%2==1)
]
然后打出一张表
[n=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
]
[f(n)=0,0,2,0,2,4,6,0,2,4,6,8,10,12,14,0
]
可以发现
[f(n)=2 imes l(将n表示为2^m+l,0<=l<2^m)
]
[=将n的二进制最高位去掉再左移一位
]
Proof:
应用数学归纳法.嘛...oier不需要详细证明