ヨセフスの問題                            戻る

 当HPがいつもお世話になっている未菜実さんから、「継子立ての問題」の話題をいただい
たので、少しこのことについてまとめてみたいと思う。

 塵劫記(1630年頃)にある継子立ては、実子15人、継子15人から家督を継ぐ1人を決める
とき、実子に後を継がせたいと思った継母(実子の親)が策略を練って、

        2、1、3、5、2、2、4、1、1、3、1、2、2、1

と交互に実子と継子を円形に並べ、最初から数えて10人目ごとに外して、継子だけを除こう
としたが、最後に残った継子が、「最後に残った私から数え始めてください。」と機転を利かし
た結果、実子の人数の多さに油断して大どんでん返しにあい、継母の目論見はあっけなく崩
れ去ったという話でした。(文章中に差別的な表現がありますが、ご容赦下さい。)

 確かに、実子15人、継子1人の場合、継子から始めて10人おきに除いていくと、出発点
の人(継子)が残ることが分かる。

             

 上図の番号は、取り除かれる順番を表す。

 このように何人かを円形に並べて、ある人から数えて10人目の人を次々に除いていき、
最後に残る人が数え始めの人になるのは、最初の人数が10人以上の場合、16人、22
人、71人、・・・ の場合であることが知られている。
 因みに、数え直しをして逆転が起こる最小の人数は15人ずつの計30人の場合である。

 一般に、円形に並んだ人から一定の順番の人を次々に除いていき、最後に残った人を
考える問題を、西洋では、ヨセフスの問題 (370年頃ヘゲシッパスの名で書かれた物語
が起源といわれる)と呼ぶらしい。

  ※ フラウィウス・ヨセフス(37頃〜100頃)は歴史家として知られ、『ユダヤ戦記』を著した。このときの実話
    を基にして作られた話と言われている。


 ヨセフスの問題は、答えを出すだけだったら簡単である。裏表のあるオセロの駒などを
用意し、全て白にして円形に並べる。出発点を決めて、一定の順番毎に順次裏返してい
けばよい。

 例 トランプ13枚が裏返しに束ねられている。いま、一番上のカードを最下段に移して、
   次をめくり、机に置く。また上にあるカードを最下段に移して、次をめくり、先ほど置か
   れたカードの右横に置く。このような操作を順次繰り返して、次々に机に並べていく。
   このとき、並べられたカードが、左側から順番に、A、2、3、・・・、10、J、Q、K とな
   るためには、最初に束ねられていたカードは上からどういう順番に並んでいたのだろ
   うか?

    答えは、7、A、Q、2、8、3、J、4、9、5、K、6、10 である。

  これは、N個のものを円形に並べて、M個ずつ除いていくというヨセフスの問題のN=13、M=2
  の特別な場合である。

   未菜実さんは、「継子立て」で、N人をM人目ごとに取り除いていった場合の最後の1人をNとMを使って
   どのように表すかという問題を考えておられる。最後に残る位置に規則性が見出せないとのことである。



 西洋のヨセフスの問題に対して、塵劫記にある継子立ては、途中に数え直しがあり、ヨセ
フスの問題とは趣を異にしている。ちょっとだけ日本のものの方が難度が高いかなと思う。

 この「継子立ての問題」は、古くから知られているようで、1100年頃の作と言われる。一
説には藤原通憲(みちのり 1106-1159)が考えたともいわれるが、詳細は不明らしい。

 塵劫記より以前の「徒然草」(吉田兼好 1330年頃)の第137段「花は盛りに」に継子立
ての話題が取り上げられている。

 因みに、徒然草の要旨を抜粋してみると・・・。

 行き交う人たちを眺めていると、見覚えのある人がいかに多いかに気づく。そして、この世にはそれほど多くの
 人がいるわけではない、私が死ぬのはこの人たちがみんな死んだ後としても、死を待つ時間はわずかであると
 いうことを私は知った。。都に暮らす人は多いが、人が死なない日はない。死は、思いがけずやってくる。人生
 は長いなどと悠長に構えていてはいけない。人が死んでいくのは、継子立てという遊びに似ている。最初はど
 の石が除かれるか分からないが、次々に順番に取り除かれていくと、結局はどの石も逃れることはできない。

 徒然草というと、「つれづれなるままに、日ぐらし硯にむかひて、心にうつりゆくよしなしごと
を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。」という序段が有名である。
「心にうつりゆくよしなしごと」の例えに数学の話題を取り上げた吉田兼好の学識の深さに感
嘆させられる。

 未菜実さんのHP「数理パズル」を覗いたら、次のような問題が載っていた。

  ある余興で抽選会を行いました。円周上に1〜8まで番号が順番に振ってあります。
 抽選箱の中には10から20までの番号を振った紙が入っており、一枚、主催者が引き、
 「ままこだて」の要領で1番から右回りに数え始め、引いた番号ごとに数字を消してい
 き、最後に残った番号に賭けた人で商品を山分けすることになりました。
  さあ、あなただったら何番に賭けますか?そして、その確率は?

 私の計算によれば、7番に賭けるのがベストかな?この場合の確率は、5/11 でした。
また、4番の確率が、2/11。2、3、5、8番の確率が、1/11 でした。意外にも、出発点の
1番と6番は、確率が、0 でした。未菜実さんは、「答えは意外!(^_-)」と仰っていますが、
何が意外なのでしょうか?ちょっと聞いてみたいですね!

 さて、いよいよ本題に入ろう。

 N人を円形に並べて、あるところから時計回りに順に、1、2、3、・・・、N と番号をつける。
番号1から時計回りに数え始め、M人目の人をその位置から取り除くことにする。取り除か
れた次の人から時計回りに数え始め、M人目の人をその位置から取り除く。このような操
作を繰り返して、最後に残る人が何番であるかを求めたい。

 n人が円形に並んでいて、ある人から数え始めて、時計回りに上記の操作を繰り返したと
き、最後に残る人は数え始めの人から時計回りに数えて、A(n)番目とする。

 すなわち、番号1から時計回りに数え始めて、A(N)番目の人が最後に残る。

 いま、番号1から時計回りに数え始め、M人目の人をその位置から取り除いたとする。
すると、N−1人が円形に並んでいて、取り除かれた次の人(P)から時計回りに数え始め、
上記の操作を繰り返したとき、最後に残る人は、Pから時計回りに数えて、A(N−1)番目
になる。

 したがって、漸化式 A(n)=M+A(n−1) が成り立つ。もちろん、A(1)=1 である。

このとき、最後に残る番号Kは、

     K=Mod(A(N)−1,N)+1

      ただし、A(n)=M+A(n−1) (1≦n≦N)

で与えられる。ただし、Mod(a,b)は、a を b で割った余りを表す。

 この漸化式を、N=8、M=10 の場合に適用してみよう。

Mod(M−1+A(n−1),n)+1 Mod(A(n)−1,n)+1
 
Mod(9+1,2)+1
Mod(9+1,3)+1
Mod(9+2,4)+1
Mod(9+4,5)+1
Mod(9+4,6)+1
Mod(9+2,7)+1
Mod(9+5,8)+1

 したがって、未菜実さんの問題で、主催者が引いた番号が10のとき、番号7が最後に残
ることが計算で確認された。

 このような再帰的な計算は、表計算ソフト Excel の VBA にやらせるのが一番だろう。
プログラムは次の通りである。

  Function a(n,m)
  If n=1 Then
    a=1
  Else
    a=(m−1+a(n−1,m)) Mod n +1
  End If
  End Function


    Excel を起動し、[ツール]−[マクロ]−[Visual Basic Editor] とクリックして
   Editor を起動し、[挿入]−[標準モジュール] を選択して、上記を記述すればよい。
   後は、Excelの任意のセルに、例えば、 =a(8,10) と打ち込むと、瞬時に、7
   と最後に残る番号が得られる。

 この関数を用いて、Excel上で、Nを連続的に変化させると(Mは10に固定)
最後に残る人が数え始めの人になるのは、最初の人数が、

    1、2、16、22、71、227、528、1227、・・・

の場合であることが容易に確認される。

(追記) 当HPで活躍されている菅ちゃんから、「継子立て」についてご寄稿いただいた。

 「継子立て」については古語辞書や国語便覧にも掲載されているが、国語の授業におい
ては、古文読解のために必要な、当時の習慣や価値観を教える必要があり、そのために
「継子立て」という遊びについても、「当時のこどもはこういう遊びをしていたのだ」と説明は
している。ただ、簡単にルールを説明して理解してもらえたら、すぐに本文に戻って講読を
進める形になってしまう。というのも、古文読解力の養成が主眼であって、継子立てという
遊戯そのものを研究することが目的ではないからである。一応、古文の授業で説明する程
度のことを述べることにする。

 「継子立て」とは碁石を使う遊戯で、名称の由来は、白を先妻の子、黒を後妻の子に見
立て、相続人一人を決定するドラマに擬して遊んだことによる。「継子立て」の「立て」とは
「際立たせる」という意味からきているというのが定説である。

 「継子立て」のゲーム内容は、黒白各15個ずつ合計30個の石を一定の順序で配列し
て円形もしくは方形に並べ、その中の一つを起点にして10番目に該当する石を取り除き、
以降、順次10番目の石を取り除いて、最後に残った石を勝ちとするルールである。
石の配列方法を工夫することで、特定の石が最後に残る(つまり勝ちになる)ように仕組
むことができる。さらに、途中で数え直しすることで、逆転現象が起こることが、このゲー
ムの特徴になっている。

 白い石1個と黒い石15個が残った段階で、今度は白い石を起点にして10番目の石を
取り除いていく作業を繰り返すと、今度は黒い石が全て取り除かれ、最後に白い石1つ
だけが残る。継子立てに関する記述は『塵劫記』の他、それよりはるか以前に成立した
『二中暦』、『簾中抄』にも見られる。

 徒然草は私の卒業論文のテーマにした作品。じっくり読んだので137段も当然知ってい
る。この文中に、
 「継子立てと言ふものを双六の石にて作りて、立て並べたるほどは、取られん事いづれ
の石とも知らねども、数へ当てて一つを取りぬれば、その外は遁れぬと見れど、またまた
数ふれば、かれこれ間抜き行くほどに、いづれも遁れざるに似たり。」とあり、「人間は誰
でもいつかは必ず死がやってくる」ということの比喩として、継子立てを例示している。

 授業で「継子立て」を説明する場合、机に碁石を並べても、後ろの座席に座っている生
徒には見えないので、●と○を描いて板書してから10番目のものを数えながら黒板消し
で一つずつ消したりなどしている。ただ、なぜ30個の石でやると逆転現象が起こるのか?
なぜ10番目の石を取り除くとそうなるのか?という理由までは数学的現象なので説明は
していない。

 しかし、「継子立て」も考えてみれば不思議なものである。なぜ10番目の石を取り除かな
ければならないのか?5番目の石や2番目の石ではだめなのか?それに最初に白黒15
個ずつという設定も、たとえば17個ずつ34個の石では成立しないというのも不思議である。
30個の石と10番目を取り除く ・・・・ この数のもつ意味はやはり数学の分野ですね。


(追々記) 上記では、N人を円形に並べて、ある番号から時計回りに数え始め、M人目の
      人を順に、その位置から取り除いていったとき、最後に残る人が何番であるかに
      ついて考え、漸化式を求めて、実際にプログラムを組んだりもした。

 ここでは、特に、M=2 の場合を取り上げ、その考察を行いたいと思う。

問題設定  N人を円形に並べて、あるところから時計回りに順に、1、2、3、・・・、N と番
       号をつける。番号1から時計回りに数え始め、2人目の人をその位置から取り
       除くことにする。取り除かれた次の人から時計回りに数え始め、2人目の人をそ
       の位置から取り除く。このような操作を繰り返して、最後に残る人が何番である
       かを求めよ。

 例えば、N=10 の場合を実際に行ってみよう。
下記で数字が一直線上に並んでいるが、左端と右端は線で結ばれ円形に並んでいるものと考えて下さい

10
×              
    ×          
        ×      
            ×  
              ×
  ×            
          ×    
×              
              ×  
                 

 上記の手順から、最後に残る番号は、5番であることが分かる。

 いま、番号1から始めて、最後に残る人の番号を、F(N) とおくと、上記より、F(10)=5
となる。

 N=1、2、3、・・・・、9 についても同様に計算すると、

 F(1)=1 、F(2)=1 、F(3)=3 、F(4)=1 、F(5)=3 、F(6)=5 、F(7)=7

 F(8)=1 、F(9)=3

となる。

 これらをじっと眺めていると、あまりに不規則で規則性がないように感じられるが、実は
非常に美しい法則のあることが簡単に確かめられる。

 番号 1、2、3、・・・、2n の 2n 人が円形に並んでいる場合、一周して残っている番号
は、1、3、5、・・・、2n−1 の n 人である。このとき、F(N) の定義から、最後に残る人
の番号は、上の数列のF(n)番目なので、2F(n)−1 である。
 よって、
        F(2n)=2F(n)−1

が成り立つ。同様に、

 番号 1、2、3、・・・、2n+1 の 2n+1 人が円形に並んでいる場合、一周して残って
いる番号は、3、5、・・・、2n+1 の n 人である。このとき、F(N) の定義から、最後に
残る人の番号は、上の数列のF(n)番目なので、2F(n)+1 である。
 よって、
        F(2n+1)=2F(n)+1

が成り立つ。

 この漸化式を用いると、例えば、20人いた場合は、F(20)=2F(10)−1=9 より、
9番の人の残ることが簡単に求められる。

 漸化式は、さらに、次のような変換公式をも生み出す。

    N=a+an-1n-1+・・・+a12+a0  (≠0) のとき、

 F(N)=b+bn-1n-1+・・・+b12+b0

           ただし、 a=1 のとき、 b=1
                 a=0 のとき、 b=−1
                      (k=0、1、2、・・・、n)


(略証) n に関する帰納法で示される。
    n=0 のとき、 N=a0=1 より、左辺=F(N)=F(1)=1 、右辺=b0=1 なの
      で、n=0 のとき成り立つ。
    n=k (k≧0)のとき成り立つと仮定する。すなわち、
      F(a+ak-1k-1+・・・+a12+a0)=b+bk-1k-1+・・・+b12+b0
    n=k+1 のとき、N=ak+1k+1+a+・・・+a12+a0 において、
      a0=0 のとき、N=2(ak+1+ak-1+・・・+a1) は偶数なので、
        F(N)=2F(ak+1+ak-1+・・・+a1)−1
            =2(bk+1+bk-1+・・・+b1)−1
            =bk+1k+1+b+・・・+b1+b0
      a0=1 のとき、N=2(ak+1+ak-1+・・・+a1)+1 は奇数なので、
        F(N)=2F(ak+1+ak-1+・・・+a1)+1
            =2(bk+1+bk-1+・・・+b1)+1
            =bk+1k+1+b+・・・+b1+b0
     となるので、n=k+1 のときも成り立つ。
    よって、全ての n に対して、与式が成り立つ。

例 20=1・24+0・23+1・22+0・2+0 なので、
  F(20)=1・24−1・23+1・22−1・2−1=16−8+4−2−1=9 となる。

(コメント) 2進法展開というと、あまり馴染みが薄いが、このような使い方を知ると、俄然
      その表記方法の特性が光り輝いて見える。とても素晴らしい変換公式だ!

(参考文献: ローレン・C・ラーソン 著 秋山 仁 ・飯田博和 訳
                     数学発想ゼミナール1 (シュプリンガー・フェアラーク))

    (補足) 平成19年8月27日付け

       上記の漸化式に関連する問題が、平成19年度入試 鳥取大学医学部 で出
      題された。

        1 から n までの数字が 1 つずつ書かれた n 枚の
       カードを右の図のように円周上に時計回りに並べる。

        2 が書かれたカードから始めて時計回りに 1 枚
       おきにカードを取り除く操作を続けていき、カードが
       最後の 1 枚になるまで円周上を何回でも回る。そ
       して残った 1 枚のカードに書かれた数を F(n)とす
       る。

        ただし、 1 枚おきに取り除く操作は、まだ円周上に
       残っているカードに対して行う。

        (1) 2 から 8 までの n に対し、F(n)の値を求めよ。

        (2) 自然数 n に対して、 F(2n)=2F(n)−1 、F(2n+1)=2F(n)+1
           が成り立つことを示せ。

        (3) 自然数 n に対して、F(2)=1 が成り立つことを示せ。

        (4) F(210+29+28+・・・+2+1)の値を求めよ。


        問題の文章が少し分かりにくい...。

          「1から時計回りに数え始め、2人目の人をその位置から取り除く。取り
          除かれた次の人から時計回りに数え始め、2人目の人をその位置から
          取り除く。このような操作を繰り返す。」

       と解釈できるかが、まず問題解法の糸口だろう。


       (略解)(1)は、F(2)=1、F(3)=3、F(4)=1、F(5)=3、F(6)=5、
                F(7)=7、F(8)=1 である。

          (2)は、上記で証明した通りである。

          (3)は、数学的帰納法による。
              n=1 のとき、F(2)=1 より成り立つ。
              n=k(k≧1)のとき成り立つと仮定する。すなわち、 F(2)=1
              n=k+1 のとき、 F(2k+1)=F(2・2)=2F(2)−1=1
               よって、n=k+1 のときも成り立つ。
              したがって、すべての自然数 n に対して、 F(2)=1

          (4)は、(2)を繰り返し用いて得られる。 すなわち、
             F(210+29+28+・・・+2+1)
             =F(2(29+28+・・・+2+1)+1)
             =2F(29+28+・・・+2+1)+1
             =・・・・・・・・・・・・・・・・・・・・・・・
             =29F(2+1)+28+・・・+2+1
             =210+29+28+・・・+2+1
             =211−1
             =2047  (略解終)

        (コメント) 上記の公式を知っていれば、

             F(210+29+28+・・・+2+1)=210+29+28+・・・+2+1

            から直ちに答が導けるだろう。


(追々々記) 「継子立て」を用いて特定の集団を合法的に排除するためには、排除する集
        団を非合法的に並べなければならないところが「継子立て」の弱点である。

 最近、ある書籍で「継子立て」の並べ方を、言葉になぞらえて覚える方法があることを知
ったので、紹介したい。

例 白石 15個、黒石 15個を円形に並べる。ある白石から時計回りに数え始め、9番目
  の石を取り除く。取り除かれた次の石から時計回りに数え始め、9番目の石を取り除
  く。このような操作を繰り返して、黒石だけを取り除くようにしたい。最初に、どのように
  並べたらいいのだろうか?

   この答えは、時計回りに、

  白、黒、白、黒、白、黒、白、黒、白、黒、白、黒、白、黒

と並べればよい。実際にやってみると、白から始めて順次黒のみが取り除かれる。

 その覚え方は、個数に注目して、

  は、ア段の音、は、イ段の音、は、ウ段の音、は、エ段の音、は、オ段の音

 とするといいそうだ。適当に意味がある言葉を続けるようにして、次のように作ってみた。

   て の ち か く は さ き に つ か み し か

    (手の近くは、先に掴みしか!)

(コメント) これで本当に覚えられるかしら?