0.「継子立て」とは・・・
 
継子立て(ままこたて)は碁石を使う遊戯のことで、徒然草(つれづれぐさ)(1330年頃)の文中に引用されているほど、古くからわが国に伝わる一種の数理パズルです。この名称の由来は、例えば、黒石を先妻の子,白石を後妻の子に見立てて、相続人一人を決定するというドラマに擬して遊んだことによります。この「継子立て」の「立て」とは、「際立たせる」という意味からきているというのが定説です。

1.塵劫記に載っている問題
 算法(和算)の学習書である塵劫記(じんこうき)(1630年頃)には、次のような面白い問題が載っています。

 実子15人、継子15人から家督を継ぐ1人を決めるとき、実子に後を継がせたいと思った継母(実子の親)が策略を練って、下の図[A]に示したように実子と継子を円形に並べ、最初から右回りに数えて10人目ごとに外して、継子だけを除こうとした。途中で最後に残った一人の継子が、『最後に残った私から数え始めてください。』 と機転を利かした結果、継母が実子の人数の多さに油断して大どんでん返しにあい、継母の目論見(もくろみ)はあっけなく崩れ去った。

 確かに、実子15人と継子15人の場合、上の図[B]に示したように途中で一人の継子だけが残ります。また、16人の子どものうちにただ一人残った継子から数え始めると、上の図[C]に示したようにこの継子だけが最後に残ります。

 一般に、何人かの子どもを円形に並べて、ある子どもから数えて10人目の子どもを次々に除いていき、最後に残る子どもが数え始めの子どもになるのは、最初の人数が10人以上の場合、最初の子どもの人数が 16, 22, 71,227, 528,・・・の 場合であることが知られています。

 つぎの【問題1】(プログラム)で  m=10 として、このことを確認してみましょう。

2.最後に残る人の番号を求めるプログラム
 じつは、子どもの人数と何番目ごとに除いていくかという値を定めると、最後に残るのが何番目の子どもであるかを事前に知ることができます。

 つぎの【問題2】(プログラム)で  n=16, m=10 として、このことを確認してみましょう。

 いま、n人が円形に並んでいて、番号1の人から時計回りに数えてm番目の人をその位置から取り除いたとき、最後に残る人の番号をF(n)とします。すると、n−1人が円形に並んでいることになるので、取り除かれた次の人(P)から時計回りに数えるとして、上記の操作を繰り返したときに最後に残る人は、Pから時計回りに数えて F(n-1)番目になります。したがって、題意から次の式
       F(n)=m+F(n-1)  ・・・・・・・・・・・・・・・・・・・ @    
が成り立ちます。ここで、題意から F(1)=1 と定めます。
また、最後に残る人の番号F(n)は、F(n) の値が 1≦F(n)≦n の範囲に収まるようにするためには
       F(n)=Mod(F(n)-1,n)+1 ・・・・・・・・・・・・・・ A
でなければなりません。したがって、@とAから次の漸化式
       F(n)=Mod(m-1+F(n-1),n)+1 ・・・・・・・・・・ B    
が得られます。 ただし、@とBの中の記号 Mod(a,b) はaをbで割った余りを表します。

 上記の【問題2】では、漸化式Bを繰り返し使って、F(n)の値を計算しています。このような再帰的な計算は、10進Basicによるプログラミングでは、再帰的関数を使って、次のように表されます。

    EXTERNAL FUNCTION f(n,m) 
      IF n=1 THEN 
        LET f=1
      ELSE 
        LET f=MOD(m-1+f(n-1,m),n)+1 
      END IF
    END FUNCTION 

 また、Javaによるプログラミングでは、再帰的メソッドを使って、次のようになります。

    static int f(int n , int m) {
      if (n==1) return(1); 
      else return( (m-1+f ( n-1,m) ) % n+1); 
    } 

【注】
 これまでに示した図[A],[B],[C]と【問題1,2】はJavaによってプログラミングされています。そのうち、左の欄外に示したソースコードをクリックすると、【問題2】についてのJavaによるプログラムのソースコードを見ることができます。

3おわりに
 「継子立て」に類似のパズルは他にもいろいろあります。一般に、円形に並んだ人を一定の順番の人を次々に除いていき、最後に残った人を考える問題を、西洋では古くから「ヨセフス(Josephus)の問題」と呼んでいます。詳しくは次の参考資料Dを参照してください。
 また、
「継子立て」は次の参考資料AやBの「算法少女」でも取り上げられています。この本は少年少女歴史小説として中学生向きに書かれたものですが、一般の方々にも是非読んでいただきたい名著だと思います。右の写真はBの表紙を写したものです。

 なお、私のホームページには、「継子立て」の他にも、いくつかの数理パズルが掲載されています。ご覧になりたい方は左の欄外に示した数理パズルの項目をクリックしてください。

【参考資料】
@ 和算書 「算法少女」
 千葉桃三・千葉あき 共著 1775年(安永4年)刊 
A 少年少女歴史小説 「算法少女」(絶版) 遠藤 寛子 著  岩崎書店 1973年発行 
B 再刊 「算法少女」 遠藤 寛子 著 ちくま学芸文庫  筑摩書房  
C インターネット 「算法少女」 
  http://www.geocities.jp/nicht48/syoujyo/syoujyo.html
D インターネット 「ヨセフスの問題」
  
http://www004.upp.so-net.ne.jp/s_honma/josephus/josephus.htm


このページの先頭にもどる