1~2*n 番目までの 2*n 個の個体が円周上に並んでいる。2 番目から初めて 1 つ置きに取り去る。最後に取り除かれるのが最初に並んだときの n 番目の個体であるような n を小さい方から 5 つ求めよ。
k = 0
n = 5 # 21, 85, 341, 1365, 5461, 21845 i.e. a[1]=5, a[i]=4*a[i-1]+1, i > 1
repeat {
n = n+1
seat = logical(2*n)
seat[n] = TRUE
i = 2
ok = TRUE
for (m in (2*n-1):1) {
if (seat[i]) {
ok = FALSE
break
}
seat
i = i+1
if (i > m) i = i-m
}
if (ok && seat) {
print(n)
k = k+1
if (k == 5) break
}
}
このプログラムで 4 つ目までは比較的短時間で求まる。最初の n=5 を含めて,よく眺めると,規則性があることが分かる。で,5 つ目は 5461 であると当たりを付けて計算してみると確かに n = 5461 は解である。21845 は 6 つ目...
証明ができればよいのだけど。
※コメント投稿者のブログIDはブログ作成者のみに通知されます