裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

円周上に並んでいる個体を 1 個ずつ取り除いて...

2014年10月22日 | ブログラミング

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 つ目...

証明ができればよいのだけど。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 漸化式が知られている | トップ | CodeIQ 7 を数える(2) »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事