数え上げの問題                            戻る

 当HPの掲示板「出会いの泉」に、当HPがいつもお世話になっているHN「at」さんが次の
ような問題を出題された。(平成24年9月13日付け)

問題  nを任意の正の整数とする。今、1 が 1個、2 が 2個、… 、n が n 個 あるも
 のとする。これら n(n+1)/2 個の数のすべてを同じ数が隣り合わないように横一列
 に並べる。このような並べ方の総数を a(n) 通りとするとき、a(100)の値はいくつに
 なるか?


例  a(1)=1 、a(2)=1 、a(3)=10 、a(4)=1074 、a(5)=1637124 である。

 実際に、例えば、n=3 のとき、32323 の隙間に1を入れる場合が6通り、

31323や32313の隙間に2を入れる場合が2通りずつあり、6+2+2=10(通り)となる。

 この数列は、オンライン整数列大辞典(A190945)に、現在までのところ、n=13 までの値が
登録されている。


 GAI さんからのコメントです。(平成24年9月14日付け)

 およそ 5050!/(2!*3!*4!*・・・*100!)*(1/2)^97*(1/100) くらい?


 at さんからのコメントです。(平成24年9月14日付け)

 5050!/(2!*3!*4!*・・・*100!)*(1/2)^97*(1/100) は、9540桁の正整数になりますね。気が向
いたらa(100)の正確な値を求めてみてください。私が計算機を使って行った計算によると正
確な値は、9542桁の正整数になりました。(→参考:数式処理ソフトmaximaによる計算結果


 GAI さんからのコメントです。(平成24年9月14日付け)

 at さんが出された数値を確認しました。(私はPARI/GPという計算ソフトを利用)もちろん、
これは近似値であり、その正確な値はわかりません。とりあえず、a(14)を正確に出すことに
挑戦できないでしょうか?どなたか、プログラムを組んで求めて頂きたいが...。


 空舟さんからのコメントです。(平成24年9月15日付け)

 i までの数字を使った並びで隣接が j 箇所ある並び方を二重配列a[i][j]に入れて、漸化式
的に求めてみました。

a[1]=[1]、a[2]=[1,2]、a[3]=[10,26,18,6]、a[4]=[1074, 3366, 4170, 2730, 1020, 216, 24]、... と
 なるように、a[i-1]を元にして、a[i]を計算していく方針です。


配列が書きやすい(よく書き慣れてる)javascriptで実装しました。javascriptを知らなくてもや
ってることは分かりやすいと思います...。(C(x,y)は組合せ、H(x,y)は重複組合せ)

<script>
var N=20;var a=[[],[1]];
for(i=2;i<=N;i++){a[i]=[];var s=(i-1)*i/2+1; //s:i-1までを使った並びの数+1
for(j=0;j<s;j++){
y=0;
for(k=0;a[i-1][k];k++){ // a[i-1][k]からの寄与を考える。
  var d=j-k; //差分
//隣接をm個除去しておいてd+m個隣接を増やす入れ方を考える。
//隣接箇所(k)からm箇所選んでに数字を入れ
//非隣接箇所(s-k)からmm=(i-d-2m)箇所数字を入れ
//入れた数字(m+mm)にd+m個数字を重複的に追加する方法の数である。
//mの範囲は0≦m≦k, かつ0≦mm≦s-k となる範囲、そしてm+mm≠0。
//dが負の時もあるから d+m<0 もはじく。
  for(m=0;m<=k;m++){
   if(d<0)m=-d;
   var mm=i-d-2*m;
   if(0<=mm && mm<=s-k && m+mm!=0){
    y+=a[i-1][k]*C(k,m)*C(s-k,mm)*H(m+mm,d+m);
}}}
a[i][j]=y;
}}
</script>



※空舟さんからの補足(平成24年9月15日付け)

 実際の所調べてみると、上記で、 mm≦s-j にしても mm≦s-k にしても、この条件は機能
していないらしく[恒等的]、不要のようです。(この条件をはずしても同じ結果になりました。

 検証:mm =i-m-(d+m)≦i 、s-k ≧i*(i-1)/2+1- (i-1)*(i-2)/2 ≧i より
    s-k≧i≧mm が言える。s-j は、j≦k のときは、s-j≧s-k≧i≧mm でOK
    j>k のときは、d=j-k>0 なので、s-j=(s-k)-d≧i-d≧i-m-(d+m)=mm


 a[i][0] を、i = 1 から順番に出力したものは以下です。javascriptなので浮動小数点になっ
ていますが(+オーバーフロー)

a1 = 1
a2 = 1
a3 = 10
a4 = 1074
a5 = 1637124
a6 = 45156692400
a7 = 27230193578558160
a8 = 4.2029643494394156e+23
a9 = 1.9020007156743964e+32
a10 = 2.843464512159537e+42
a11 = 1.5621373884080024e+54
a12 = 3.4720858746642464e+67
a13 = 3.40830776138113e+82
a14 = 1.6016029459985872e+99
a15 = 3.881569719975021e+117
a16 = 5.200082108321898e+137
a17 = 4.10881703493172e+159
a18 = 2.0349827869217582e+183
a19 = Infinity
a20 = NaN

 とりあえず合ってそうですね。実は私自身は数学ソフトでのプログラミングはよくできない
ので後は任せます。なお、漸化式を一応数式で書いておくと、

 a[i][j]=ΣΣa[i-1][k]*C(k,m)*C(s-k,mm)*H(m+mm,d+m)

ここで、s=(i-1)*i/2+1, d=j-k, mm=i-d-2m

Σの範囲(kとmについての和)は、

・kはa[i-1][k]が存在する範囲、つまり、0≦k≦(i-1)*(i-2)/2
・mは0≦m≦k かつ d+m≧0 かつ 0≦mm≦s-j かつ m+mm≠0


 GAI さんからのコメントです。(平成24年9月15日付け)

 最初意味が分からず、書いてある通りに全パターンを書き出し(n=3で実行)、隣接する個
数をカウントすることで、まず下の行列の意味がわかりました。

a[1]=[1]、a[2]=[1,2]、a[3]=[10,26,18,6]、a[4]=[1074, 3366, 4170, 2730, 1020, 216, 24]、... と
 なるように、a[i-1]を元にして、a[i]を計算していく方針です。


 上の方針を実行していくときの着眼点も掴みきれず、とりあえず漸化式を、n=2 即ち、
a[2][0]=1、a[2][1]=2 のデータを基に、n=3での a[3][0]、a[3][1]、a[3][2]、a[3][3] を導いていく
と、なんとピッタシと現れてくるではありませんか!(よくこんな規則が裏に隠れていることに気
づけますね。ほんと感心します。しかもこれを記述する工夫も凄い!)空舟さんの漸化式の活
用を目指して、計算ソフトでプログラミング中です。
(私はプログラムは初心者で上手くいくかな???)


 GAI さんからのコメントです。(平成24年9月15日付け)

 空舟さんが示された漸化式で、

  a[3][0]=10 、a[3][1]=26 、a[3][2]=18 、a[3][3]=6

より、 a[4][0]=1074 まで、私が解釈した漸化式で構成できることが確認できたのですが、
次の a[4][1] を出すときに行き詰まっています。どこがおかしいのかご指摘下さい。

a[4][1]=a[3][0]*C(0,0)*C(7,3)*H(3,1) + a[3][1]*C(1,0)*C(6,4)*H(4,0)

+ a[3][1]*C(1,1)*C(6,2)*H(3,1) + a[3][2]*C(2,1)*C(5,3)*H(4,0) + a[3][3]*C(3,2)*C(4,2)*H(4,0)

=10*1*35*3+26*1*15*1+26*1*15*3+18*2*10*1+6*3*6*1

=1050+390+1170+360+108 = 3078

 空舟さんの結果 a[4][1]=3366 に対して -288(6の倍数分)不足してしまいました。


 空舟さんからのコメントです。(平成24年9月15日付け)

 k=2、m=2 と k=3、m=3 が抜けているようです。a[3][2]*C(2,2)*C(5,1)*H(3,1)=270、
a[3][3]*C(3,3)*C(4,0)*H(3,1)=18 を加えると合います。その次は、

a[5]=[1637124, 6175296, 10226280, 9877440, 6217680, 2686656, 815304, 174000, 25500,
   2400, 120]

a[6]=[45156692400, 200052724080, 407307126240, 507210750480, 433434545880,
 270058551840, 127142908200, 46217310480, 13130544240, 2929689840, 512302560,
 69506640, 7161000, 537600, 27000, 720]

になっています。


 GAI さんからのコメントです。(平成24年9月16日付け)

 空舟さんによる漸化式の提示を受けて、例のオンライン整数列大辞典にも載っていない
n=14、15での正確な値を計算ソフトを利用して求めてみました。

 なお、y(14,0)がa(14)に相当する値になります。(a(15)はy(15,0)になります。)

 以下、y(14,n)の値は、同じものを含む105(=1+2+3+・・・+14)個の数字を並べたとき、隣に
同じ数字が並んでいる個数がn個である場合の総数になります。

a(14)=y(14,0)
=16016029459985875606798676171028758593081536344920890361863264740976338483
 98824106722597980721984000

a(15)=y(15,0)
=38815697199750221664144803610305604011772332370822925627884508054754223508
 59154139368271934640369126993346182798080000

その他の隣接数に対応する場合の数(→ 参考


 at さんからのコメントです。(平成24年9月16日付け)

 私の計算によるa(14)の値は、GAIさんの示されたy(14,0)の値と完全に一致しています。私
の計算方法は包除原理を使ったもので、a(n)の値だけしか求めることができません。
(y(14,2)やy(14,3)に相当するものは私の計算方法ではわからないです。)

 a(15)の値も、GAIさんの示された値で間違いないと思います。私の計算では、

a(20)
=154153662951163661668418347459109977994449840778947953198330393605739366550
 668040729072970121940909926786637754163094125373800382845531577698229021548
 964931460056137492675286412868495863955175997012028635074610101277336323498
 755571712000

となりました。


 GAI さんからのコメントです。(平成24年9月16日付け)

 確認お願いします。

a(20)
=154153662951163661668418347459109977994449840778947953198330393605739366550
 668040729072970121940909926786637754163094125373800382845531577698229021548
 964931460056137492675286412868495863955175997012028635074610101277336323498
 755571712000

a(19)
=669043210744269934985822296285360221293484591853878004479923362207956581549
 752907442087829009749293812894046518507517232564805649441204113664299670920
 99179554077993061569125421870640939911138667817003804672000

a(18)
=203498278692175899742743781329016894314300211471634571518233036784706985686
 350451706495207916098321466536050134420682470953757763652978356820175238209
 5460452410654971202564275410944000

a(17)
=410881703493172170945667552195140630805937876605368166920095283149010060772
 418285374554760168320691838849273879311078051939654080357132449749170621093
 9548160000

a(16)
=520008210832189859924214574823280144447190717474392949132171050029205084739
 351946224138534275493208110511108703374340683743272007702579200


 Seiichi Manyama さんからのコメントです。(平成28年1月3日付け)

 Ruby による計算結果


(追記) 令和5年6月24日付け

 いくつかの「数え上げ」の問題に挑戦しました。

問題  円周上に等間隔に並ぶ8個の点から3個選んで三角形を作る。回転や裏返しで重
    なるものは同一と見ることにして、異なる三角形は何個出来るか?

(解) 隣り合う2点間の弧の長さを1とする。三角形の3辺 a、b、c に対応する弧の長さに

着目して、求める場合は、

 (a,b,c)=(1,1,6)、(1,2,5)、(1,3,4)、(2,2,4)、(2,3,3)

の5通りである。  (終)


問題  立方体ABCD-EFGHの頂点Aから出発し、立方体の辺に沿って次々に隣の頂点
    に進み、全部の頂点を1回ずつ通って最後の頂点に達する方法の数を求めよ。

  

(解) Aを出発して次に行く頂点の可能性は、B、D、E の3通りあり、それぞれの場合の数
   は同数であるので、「A→B」の場合を調べれば十分である。

 ・A→B→C→D の場合

  A→B→C→D→H→E→F→G    A→B→C→D→H→G→F→E 

 ・A→B→C→G の場合

  A→B→C→G→F→E→H→D 

 ・A→B→F→E の場合

   A→B→F→E→H→D→C→G   A→B→F→E→H→G→C→D 

 ・A→B→F→G の場合

  A→B→F→G→C→D→H→E 

 以上から、「A→B」の場合は6通りあるので、

求める場合の数は、 6×3=18(通り)  (終)


(追記) 令和6年8月10日付け

 次の東北大学 理系(1978)の問題も数え上げの問題である。

第1問  正八角形Aの辺と、対角線(ないしその一部分)とでつくられる多角形について、次
  のものの個数を求めよ。

(1) 3つの頂点がすべてAの頂点である三角形
(2) 4つの頂点がすべてAの頂点である四角形
(3) 少なくとも2つの頂点がAの頂点である三角形

(解)(1) 83=56(個)

(2) 84=70(個)

(3) 3つの頂点がすべてAの頂点である三角形は、(1)より、56個

 2つの頂点がAの頂点で、残りの頂点が対角線の交点である三角形の個数を数える。

 対角線の交点は、4つの頂点がすべてAの頂点である四角形に対して、ただ1個ある。

 このとき、(3)の条件を満たす三角形は、4個出来るので、三角形は、(2)より、全部で

 70×4=280(個) できる。

 したがって、求める場合の数は、 56+280=336(個)  (終)


(追記) 令和6年8月17日付け

 8月16日付け朝日新聞朝刊に、「数学は世界をつなぐ共通の言語」と題して、特集が掲載
された。自由な発想と創造力で世界とつながるべく、挑戦してみた。

問題1(日本ジュニア数学オリンピック予選問題を改題)

 a<b<c を満たす正の整数の組(a,b,c)であって、

 a2−9a>b2−9b>c2−9c

が成り立つものはいくつあるか?

(解) a2−9a>b2−9b より、 a2−b2−9a+9b=(a−b)(a+b−9)>0

 a−b<0 なので、 a+b−9<0

同様にして、 b2−9b>c2−9c より、 b2−c2−9b+9c=(b−c)(b+c−9)>0

 b−c<0 なので、 b+c−9<0

ここで、 a+b−9<b+c−9<0 なので、

 a<b<c かつ b+c−9<0 が成り立つものを探せばよい。

c≦4 のとき、 b+c<2c≦8<9 なので、 a<b<c≦4 を満たす全ての正の整数に

ついて、条件を満たす。

よって、 (a,b,c)=(2,3,4)、(1,3,4)、(1,2,4)、(1,2,3) の4通り

c≧5 のとき、 c’=9−c とおくと、c’≦4 となる。

このとき、 b+c=b+9−c’<9 から、 b<c’ なので、 a<b<c’≦4 を満たす全て

の正の整数について、条件を満たす。

よって、 (a,b,c’)=(2,3,4)、(1,3,4)、(1,2,4)、(1,2,3)

 すなわち、 (a,b,c)=(2,3,5)、(1,3,5)、(1,2,5)、(1,2,6) の4通り

以上から、求める場合は、

(a,b,c)=(2,3,4)、(1,3,4)、(1,2,4)、(1,2,3)、(2,3,5)、(1,3,5)、
  (1,2,5)、(1,2,6)

の8通りある。  (終)


(コメント) 計算は、 4343=8(通り) としても求められる。


問題3  最大公約数が1である正の整数の組(a1,a2,a3,a4)であって、

 a1/a2 ,2a2/a3 ,3a3/a4 ,4a4/a1

がすべて整数となるようなものはいくつあるか。


(解) (a1/a2)(2a2/a3)(3a3/a4)(4a4/a1)=2・3・4=24=23・3

 4つのものから重複を許して3つとる組合せの数は、 4363=20(通り)

このうちの1通りに対して、

 4つのものから重複を許して1つとる組合せの数は、 4141=4(通り)

したがって、求める場合の数は、 20×4=80(通り)  (終)


(コメント) 例えば、a1/a2=2・3=6、2a2/a3=2、3a3/a4=2、4a4/a1=1 のとき、

 最大公約数が1である正の整数の組(a1,a2,a3,a4)は、

 a1=12、a2=2、a3=2、a4=3 とただ一つ定まる。

1/a2=2・3=6、2a2/a3=4、3a3/a4=1、4a4/a1=1 のとき、

 a1=12、a2=2、a3=1、a4=3 とただ一つ定まる。

 以下、同様。


問題6  白石、黒石合わせて4個を横一列に並べたところ、右隣に白石が置かれている黒
  石の個数より、左隣に白石が置かれている黒石の個数の方が大きくなった。このような石
  の並べ方は何通りあるか。

 問題の意味を理解するために実験してみた。

 白石を「1」、黒石を「0」とすると、4桁の数****の並べ方は全部で、24=16(通り)ある。

そのうち、右隣に白石が置かれている黒石は、「01」が対応し、左隣に白石が置かれている
黒石は、「10」が対応する。

 したがって、16通りのうち、「01」の個数より、「10」の個数が多いのは、次の4通りある。

 1000 、1100 、1010 、1110

 以上を踏まえて、解答をまとめると、次のようになる。

(解) 白石を「1」、黒石を「0」とすると、4桁の数は、a1234 と表される。

ただし、ak=0 または 1 (k=1、2、3、4)である。

題意より、 1≦k≦3 に対して、 a−ak+1=1 または −1 または 0 である。

 右隣に白石が置かれている黒石の個数より、左隣に白石が置かれている黒石の個数の方

が大きくなるためには、 Σk=13 (a−ak+1)≧1 すなわち、 a1−a4≧1 であればよい。

このとき、 a1=1 、a4=0 と一意に定まり、a2、a3 は任意である。

以上から、求める場合の数は、 22=4(通り) である。  (終)


(コメント) 上記のように考えると、白石、黒石合わせてn個を横一列に並べる場合、条件を
    満たすような場合の数は、 2n-2 通り であることが分かる。



  以下、工事中!