数の配列                                  戻る

 下図のような格子状の表の枠内に次の条件を満たすように、0以上の整数を書き込む。

(条件) 1.左上隅は、「0」と書き込む。

      2.どの枠においても、

        「その枠と同じ行で、枠の左側にある数」

         および

        「その枠と同じ列で、枠の上側にある数」

       とは異なる数のうち、最小の数を書き込む。



 この条件で、幾つか数を書き込むと

 
 
 
   
     
       
           

となる。そこで、問題です。

   40行20列目の枠内には、どんな数が書き込まれているでしょうか?

 もっと一般に、

   m行n列目の枠内には、どんな数が書き込まれているでしょうか?

















(答え) まずは条件に従って地道に表を埋めてみよう。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
1 0 3 2 5 4 7 6 9 8 11 10 13 12 15 14 17 16 19 18 21 20
2 3 0 1 6 7 4 5 10 11 8 9 14 15 12 13 18 19 16 17 22 23
3 2 1 0 7 6 5 4 11 10 9 8 15 14 13 12 19 18 17 16 23 22
4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 20 21 22 23 16 17
5 4 7 6 1 0 3 2 13 12 15 14 9 8 11 10 21 20 23 22 17 16
6 7 4 5 2 3 0 1 14 15 12 13 10 11 8 9 22 23 20 21 18 19
7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 23 22 21 20 19 18
8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 24 25 26 27 28 29
9 8 11 10 13 12 15 14 1 0 3 2 5 4 7 6 25 24 27 26 29 28
10 11 8 9 14 15 12 13 2 3 0 1 6 7 4 5 26 27 24 25 30 31
11 10 9 8 15 14 13 12 3 2 1 0 7 6 5 4 27 26 25 24 31 30
12 13 14 15 8 9 10 11 4 5 6 7 0 1 2 3 28 29 30 31 24 25
13 12 15 14 9 8 11 10 5 4 7 6 1 0 3 2 29 28 31 30 25 24
14 15 12 13 10 11 8 9 6 7 4 5 2 3 0 1 30 31 28 29 26 27
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 31 30 29 28 27 26
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 1 2 3 4 5
17 16 19 18 21 20 23 22 25 24 27 26 29 28 31 30 1 0 3 2 5 4
18 19 16 17 22 23 20 21 26 27 24 25 30 31 28 29 2 3 0 1 6 7
19 18 17 16 23 22 21 20 27 26 25 24 31 30 29 28 3 2 1 0 7 6
20 21 22 23 16 17 18 19 28 29 30 31 24 25 26 27 4 5 6 7 0 1
21 20 23 22 17 16 19 18 29 28 31 30 25 24 27 26 5 4 7 6 1 0
22 23 20 21 18 19 16 17 30 31 28 29 26 27 24 25 6 7 4 5 2 3
23 22 21 20 19 18 17 16 31 30 29 28 27 26 25 24 7 6 5 4 3 2
24 25 26 27 28 29 30 31 16 17 18 19 20 21 22 23 8 9 10 11 12 13
25 24 27 26 29 28 31 30 17 16 19 18 21 20 23 22 9 8 11 10 13 12
26 27 24 25 30 31 28 29 18 19 16 17 22 23 20 21 10 11 8 9 14 15
27 26 25 24 31 30 29 28 19 18 17 16 23 22 21 20 11 10 9 8 15 14
28 29 30 31 24 25 26 27 20 21 22 23 16 17 18 19 12 13 14 15 8 9
29 28 31 30 25 24 27 26 21 20 23 22 17 16 19 18 13 12 15 14 9 8
30 31 28 29 26 27 24 25 22 23 20 21 18 19 16 17 14 15 12 13 10 11
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
33 32 35 34 37 36 39 38 41 40 43 42 45 44 47 46 49 48 51 50 53 52
34 35 32 33 38 39 36 37 42 43 40 41 46 47 44 45 50 51 48 49 54 55
35 34 33 32 39 38 37 36 43 42 41 40 47 46 45 44 51 50 49 48 55 54
36 37 38 39 32 33 34 35 44 45 46 47 40 41 42 43 52 53 54 55 48 49
37 36 39 38 33 32 35 34 45 44 47 46 41 40 43 42 53 52 55 54 49 48
38 39 36 37 34 35 32 33 46 47 44 45 42 43 40 41 54 55 52 53 50 51
39 38 37 36 35 34 33 32 47 46 45 44 43 42 41 40 55 54 53 52 51 50
40 41 42 43 44 45 46 47 32 33 34 35 36 37 38 39 56 57 58 59 60 61
41 40 43 42 45 44 47 46 33 32 35 34 37 36 39 38 57 56 59 58 61 60

 上表から、40行20列目の枠内には、数「52」が書き込まれている。

(コメント) 表を手計算で埋めていくと、2つ毎、4つ毎、8つ毎という規則性が垣間見える。
      何となく、2進法が関係していそうな...雰囲気!

 下表で各数を2進数に展開してみると、

 
 
 
   
     
       
           
  
000 001 010 011 100  
001 000 011 010 101  
010 011 000 001    
011 010 001      
100 101        
           

となる。

 このとき、m−1、n−1の数を2進数にすると、m行n列目の数は、各桁を比較して

  共通の数(0 または 1)ならば、 0

  異なっていれば 1

とおくことにより生成されていることが分かる。

 この性質に注目して当HPがいつもお世話になっているHN「GAI」さんが、m行n列目の数
の求め方を示された。(平成22年7月17日付け)

 (1) m行1列目の数 A=m−1 を2進数に展開する。

      A=ap・2p+ap-1・2p-1+・・・+a1・2+a0  ( a=0 または 1 )

 (2) 1行n列目の数 B=n−1 を2進数に展開する。

      B=bp・2p+bp-1・2p-1+・・・+b1・2+b0  ( b=0 または 1 )

 (3) このとき、m行n列目の数 C は、次のように2進数に展開される。

      C=cp・2p+cp-1・2p-1+・・・+c1・2+c0  ( c=0 または 1 )

   ただし、 k=0、1、2、・・・、p で、

      a+b=0 または 2  ならば、 c=0

      a+b=1 ならば、 c=1

(例) 40行20列目の数を求めよ。

   A=39=2

   B=19=2

 より、各桁を高い方から計算して、

      C=2

 よって、 C=1・25+1・24+0・23+1・22+0・2+0=32+16+4=52

(コメント) 一見ランダムに入りそうな数ですが、きちんとした法則の下にあるのですね!
      とても不思議な感覚です。GAI さんに感謝します。

 さて、問題は上記のような操作をして所要のものが何故得られるかという点である。 

 
 
 
   
     
       
           
  
000 001 010 011 100  
001 000 011 010 101  
010 011 000 001    
011 010 001      
100 101        
           

 上表で、4行1列目の数 A=3 と 1行3列目の数 B=2 から、4行3列目の数 C=1 が
できたわけであるが、C=1 は2行1列目の数であり、1行4列目の数 A=3 とからできる
数は、何故か、B=2 である...面白い性質ですね!

 いま、2つの数 A 、B が、2進数に展開されて、

      A=ap・2p+ap-1・2p-1+・・・+a1・2+a0  ( a=0 または 1 )

      B=bp・2p+bp-1・2p-1+・・・+b1・2+b0  ( b=0 または 1 )

であるとき、

      a+b=0 または 2  ならば、 c=0

      a+b=1 ならば、 c=1

で定められる2進数 C=cp・2p+cp-1・2p-1+・・・+c1・2+c0  ( c=0 または 1 )

のことを、 C=F(A ,B) と表すことにする。

例  F(0 ,0)=0 、F(m ,0)=m 、F(0 ,n)=n 、F(3 ,2)=1

   F(F(3 ,2) ,3)=2 、・・・

 果たして、 F(F(A ,B) ,A)=B という性質は、一般的に成り立つのだろうか?

 実際に、計算して確認してみよう。

 いま、2つの数 A 、B

      A=ap・2p+ap-1・2p-1+・・・+a1・2+a0  ( a=0 または 1 )

      B=bp・2p+bp-1・2p-1+・・・+b1・2+b0  ( b=0 または 1 )

に対して、 F(A ,B)=cp・2p+cp-1・2p-1+・・・+c1・2+c0  ( c=0 または 1 )

である。ただし、

      a+b=0 または 2  ならば、 c=0

      a+b=1 ならば、 c=1

 このとき、

  F(F(A ,B) ,A)=dp・2p+dp-1・2p-1+・・・+d1・2+c0  ( d=0 または 1 )

において、d は、

      c+a=0 または 2  ならば、 d=0

      c+a=1 ならば、 d=1

により定められる。ここで、

     

なので、 d=b すなわち、 F(F(A ,B) ,A)=B が成り立つ。

 よって、m行1列目の数 A と 1行n列目の数 B から作られる数 Cについて、

     F(F(A ,B) ,A)=B

の成り立つことが示された。

 同様にして、 F(F(A ,B) ,B)=A が成り立つ。

 実際に、

     F(A ,B)=cp・2p+cp-1・2p-1+・・・+c1・2+c0  ( c=0 または 1 )

     B=bp・2p+bp-1・2p-1+・・・+b1・2+b0  ( b=0 または 1 )

に対して、

 F(F(A ,B) ,B)=ep・2p+ep-1・2p-1+・・・+e1・2+e0  ( e=0 または 1 )

 の e は、

      c+b=0 または 2  ならば、 e=0

      c+b=1 ならば、 e=1

により定められる。ここで、

     

なので、 e=a すなわち、 F(F(A ,B) ,B)=A が成り立つ。

 この性質を用いると、m行1列目の数 A と 1行n列目の数 B から作られるm行n列目の
数 Cについて、

  どの枠においても、

    「その枠と同じ行で、枠の左側にある数」

      および

    「その枠と同じ列で、枠の上側にある数」

  とは異なる数


であることが容易に示される。

 実際に、 F(A ,B)=F(A ,B’)  (ただし、B’<B) であるとすると、

        F(F(A ,B) ,A)=B 、 F(F(A ,B’) ,A)=B’

     において、 F(A ,B)=F(A ,B’) から、 B=B’ となり矛盾である。

      さらに、 F(A ,B)=F(A’ ,B)  (ただし、A’<A) であるとすると、

        F(F(A ,B) ,B)=A 、 F(F(A’ ,B) ,B)=A’

     において、 F(A ,B)=F(A’ ,B) から、 A=A’ となり矛盾である。


 あと残された問題は、数Cの最小性の証明である。すなわち、

 数Cより小さい0以上の整数は、

Cを含む行のCの左側にある数またはCを含む列のCの上側にある数の何れかに等しい


ことを示せば十分である。

(最小性の証明) 2つの数 A 、B

      A=ap’・2p’+ap’-1・2p’-1+・・・+a1・2+a0  ( a=0 または 1 )

      B=bp’・2p’+bp’-1・2p’-1+・・・+b1・2+b0  ( b=0 または 1 )

に対して、 F(A ,B)=cp・2p+cp-1・2p-1+・・・+c1・2+c0  ( c=0 または 1 )

である。ただし、

      a+b=0 または 2  ならば、 c=0

      a+b=1 ならば、 c=1

 この C=F(A ,B) の最小性は次のようにして示される。

 いま、 X=x・2+xq-1・2q-1+・・・+x1・2+x0  ( x=0 または 1 ) を、Cより

小さい0以上の整数とする。このとき、明らかに、 q≦p である。

 特に、q=p の場合は、ある自然数 r に対して、

   x=cp 、xp-1=cp-1 、・・・ 、xr+1=cr+1 、x=0 、c=1 、・・・

が成り立つ。

 ここで、 一般性を失うことなく、

  cp=1 で、 ap=1 、bp=0 としてよい。

このとき、A 、Bの p より高次の係数は全て等しい。

また、 q=p の場合に、c=1 であるが、以下では、a=1 、b=0 として考える。

=0 、b=1 の場合も同様である。

 さて、 X=x・2+xq-1・2q-1+・・・+x1・2+x0  ( x=0 または 1 )

     B=bp’・2p’+bp’-1・2p’-1+・・・+b1・2+b0  ( b=0 または 1 )

に対して、

 F(X ,B)=yp’・2p’+yp’-1・2p’-1+・・・+yq+1・2q+1+y・2+・・・+y1・2+y0

  (ただし、 y=0 または 1 )

 の y は、

      x+b=0 または 2  ならば、 y=0

      x+b=1 ならば、 y=1

により定められる。このとき、 F(X ,B)=A’ とおき、 A’<A であることを示したい。

 明らかに、A’ 、Bの q より高次の係数は全て等しく、q≦p なので、

   A’ 、A の p より高次の係数は全て等しい

 次に、q<p のときを考える。このときは、A’、Bの p 次の係数は一致するので、

   y=bp=0

となる。これに対して、ap=1 なので、 A’<A となることが分かる。

 次に、q=p のときを考える。このときは、ある自然数 r に対して、

   x=cp 、xp-1=cp-1 、・・・ 、xr+1=cr+1

が成り立つ。すなわち、

   X 、F(A ,B) の r より高次の係数は一致する。

 このとき、

     X=x・2+xp-1・2p-1+・・・+x1・2+x0  ( x=0 または 1 )

      =c・2+cp-1・2p-1+・・・+cr+1・2r+1+0・2+・・・+x1・2+x0

     B=bp’・2p’+bp’-1・2p’-1+・・・+b1・2+b0  ( b=0 または 1 )

より、F(X ,B)=A’ は、

  A’=bp’・2p’+・・・+a・2+・・・+ar+1・2r+1+0・2+・・・+y1・2+y0

と書ける。したがって、このことから、

  A’ 、A の p より高次の係数は全て等しく、

  かつ、

  A’ 、A の r より高次の係数も全て等しい


ことが分かる。さらに、 a=1 、y=0 であることから、 A’<A となることが分かる。

 以上から、何れにしても、A’<A となるので、

     X=F(F(X ,B) ,B)=F(A’ ,B)

となり、Xは、F(0 ,B)、F(1 ,B)、・・・、F(A−1 ,B)の何れかと一致する。

 他の場合も同様である。

 よって、F(A ,B) の最小性が確かめられた。 (証終)


 平成22年7月20日付けで、当HPがいつもお世話になっているHN「FN」さんより、この
「数の配列」の問題が「三山崩し」の必勝法に関連する旨ご教示いただいた。

 当HPの「パズル&クイズ」に「三山崩しゲーム」がある。平成14年9月2日アップなので、
かれこれ8年前のものになる。再度そのページを読んでみると今回の「数の配列」の問題
に通じる同じ匂いを感じることができる。

 このような機会を与えていただいたFNさんに感謝します。


 一番上の行を「0行目」、一番左の列を「0列目」とする。

 非負整数 m、n に対して、非負整数 F(m,n)を帰納的に次のように定める。

(0) F(0,0)=0

(1) F(m,n)は、

   F(m,0)、F(m,1)、・・・、F(m,n−1)、F(0,n)、F(1,n)、・・・、F(m−1,n)

  以外の最小の非負整数

 このとき、「数の問題」における m+1行 n+1列の数は、F(m,n)そのものになる。

 いま、三山崩しゲームを考える。

 3つの山 A 、B 、C に、それぞれ a 、b 、c 個の石がある。2人のPlayerが交互にどれか
1つの山から1個以上任意の個数の石を取る。最後に石を取った者を勝ちとする。


 自分が石を取り終わった後、相手がどのように石を取ろうと自分が正しく応接すれば勝ちに
なる形を必勝形と呼ぶ。

 非負整数 m、n が与えられたとき、 k 、m 、n が必勝形になる k は1通りに定まる。

これを、k=G(m,n)とおく。

非負整数 m 、n に対して、その2進和 H(m,n)を次のように定義する。

 m 、n を2進法で表示して、各桁ごとに足し算をする。ただし、2は0とする。

こうしてえられた数を、H(m,n)とする。

 一松 信 著:「石取りゲームの数理」(森北出版)によると、

   F(m,n)=G(m,n)=H(m,n)

であることが示されているとのことである。

(コメント) このページでは上記の証明により、 H(m,n)=F(m,n) であることが示され
      たことになるわけですね!



   以下、工事中