数列の謎解きで頭の体操 [応用] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 応用 | rpn電卓の高いポテンシャルはビジネス・実用・ゲームなどのアプリケーションにも対応。

HOME > 応用 > 数列の謎解きで頭の体操 hatena yahoo buzzurl livedoor del.icio.us nifty newsing twitter facebook rss ソーシャルブックマーク

数列の謎解きで頭の体操

 最近の就職活動では筆記試験の重要性が増してきています。どんなに面接の評価が高くても試験結果が悪ければ内定はもらえません。

筆記試験には性格や語学力を問うものなどがありますが、その対極に計算力を問うものがあります。その中でも頻出するのが数列を提示して次の数字を予測させるような問題です。「1 3 5 7 9 ?」のように簡単に解ける問題もあるのですが、中にはちょっと難しい問題もあります。

次の4つは数列における典型的な問題です。あなたも頭の体操をするつもりで、考えてみませんか。

数列の問題

 以下の数字に続く数を答えてください。答えは[解説]にあります。

No.1
1 3 6 10 15 21 28 ?
?を答えてください。簡単だった人は100番目の数にチャレンジしよう。
No.2
1 1 2 3 5 8 13 21 ?
?を答えてください。簡単だった人は100番目の数にチャレンジしよう。
No.3
1 2 4 8 16 31 ?
?を答えてください。簡単だった人は100番目の数にチャレンジしよう。
No.4
2 3 5 7 11 13 17 19 ?
?を答えてください。簡単だった人は100番目の数にチャレンジしよう。

三角数の数列  

 この数列は三角数です。三角数は正三角形の一辺の長さを1つずつ増やしたときの面積と考えられます。図形で示すとよく分かります。

  ●   ○     ○       ○         ○
  1   ●●   ○○     ○○       ○○
       3    ●●●   ○○○     ○○○    …
              6     ●●●●   ○○○○
                       10     ●●●●●
                                  15


数列どおりに増えていることがわかりますね。段々、三角形を大きくしていけば答えが求まりますが、描くのが大変ですね。そこで、この数列の数式が威力を発揮します。

      n (n + 1)
  T = ---------
          2


nは1から始まる自然数です。この数式のnに値を入れれば答えがすぐに求まります。例えば、問題の答えは8番目の数値なので、8を数式に引き渡せばOKです。rpnなら一行で計算できます。

  >echo 8 | rpn #n @n @n 1 + * 2 /
  36


計算の答えは36でした。使ったrpn式は、rpnプログラムにするともっとすっきりします。プログラムは次のとおりで、コピーしてrpnファイルにしてください。ファイル名は"triangul.rpn"とします。

 【三角数のrpnプログラム(triangul.rpn)】
  ===(この行の1行下からコピー)===
  #n @n @n 1 + * 2 /
  ===(この行の1行上までコピー)===


プログラムの使い方は簡単で、数列の順番を指定してrpnファイルの"triangul.rpn"を読み込むだけです。早速、8番目の数字を計算してみましょう。DOSプロンプトを起動してから、以下のrpn式を入力してください。

  >rpn 8 <triangul.rpn
  36


数列の何番目の数であっても、この調子で答えられますね。

フィボナッチ数の数列  

 この数列はフィボナッチ数です。前と前の前の数を加えたものが次の数字になります。

情報フィボナッチ数に関しては、応用コーナーウサギとフィボナッチがあります。また、黄金比率との関係については、実践コーナー数学アラカルト黄金比率とフィボナッチ数列として詳しくあります。興味のある人は閲覧ください。

最初の一つ目は例外として、前の○を黒に置き換えて長い辺の個数だけ長方形を伸ばすと図形でフィボナッチ数を得ることができます。

  ○  ○  ●○  ●●  ●●○○○  ●●●●●
  1   1    2    ○○  ●●○○○  ●●●●●
                ○○  ●●○○○  ●●●●●
                  3       5       ○○○○○  …
                                  ○○○○○
                                  ○○○○○
                                  ○○○○○
                                  ○○○○○
                                      8


長い辺の個数を数えると、きちんと数列どおりになっていますね。これを続けて長方形を描いていけばよいのですが、三角数同様に大変です。図形によらない方法でも前と前の前の値を覚えておく必要があります。それでも、rpnなら計算するのは比較的簡単です。

  >rpn @a @b + #c @c @b #a @c #b -b 0 #a 1 #b @b -r 7 | rpn 1 -c fold
  1 1 2 3 5 8 13 21


フィボナッチ数列が生成されています。もちろん、これでも答えは求まるのですが、ちょっとスマートさに欠けますね。そこで、出てくるのがフィボナッチ数列の数式です。

       n        -n
      φ - (- φ)           1 + √5
  F = -----------     ※φ= -------
         √5                   2


φは黄金比と呼ばれる言わば定数です。この数式を使えば問題を解くのは簡単です。問題では9番目の数値なので、9をrpn式に引き渡せばOKです。

  >echo 9 | rpn #n 1 5 r + 2 / #p @p @n p @p m @n m p - 5 r /
  34


答えは34。これで何番目の数字でも答えられます。ただし、何度も同じrpn式を入力するのは骨が折れます。そこで三角数同様、rpnプログラムにしておきましょう。コピーしてrpnファイルにしてください。ここでは、ファイル名を"fibonaci.rpn"としています。

 【フィボナッチ数のrpnプログラム(fibonaci.rpn)】
  ===(この行の1行下からコピー)===
  #n 1 5 r + 2 / #p @p @n p @p m @n m p - 5 r /
  ===(この行の1行上までコピー)===


プログラムの使い方は数列の順番を指定してrpnファイルの"fibonacci.rpn"を読み込むだけです。では、9番目の数字を計算してみましょう。DOSプロンプトを起動してから、以下のrpn式を入力してください。

  >rpn 9 <fibonaci.rpn
  34


これなら、何度計算しても入力が楽ですね。100番目の数字を計算するのも簡単です。

円の領域数の数列  

 この数列は円の領域の数を表しています。グラフで説明しないと分かりづらいですね。

        ........               ........               ........
     ..          ..         ..          ..         ..          ..
   ..              ..     ..     1        ..     ●. .    2      ..
  ..                ..   ..                ..   .. .   . . .      ..
  .                  .   .        . . . .  ●   .   .         . . ●
  ●       1         .   ● . . .           .   .    .   1     .   .
  ..                ..   ..                ..   .. 4  .       .   ..
   ..              ..     ..       2      ..     ..    .     . 3 ..
     ..          ..         ..          ..         ..    .  .  ..
        ........               ........               ....●..


円周のそれぞれの点からすべての点に直線を引いたときに、分断される円内の領域の数を示しています。これも図形を描き続ければ答えを得られます。と言っても問題の7番目、つまり7つの点を結ぶ直線を引くのも大変なので、数式を使います。

       4     3      2
      n  - 6n  + 23n  - 18n + 24
  R = --------------------------     ※Rは領域の数、nは点の個数
                 24


複雑に見える式ですが、rpnで計算すると簡単に答えが出てきます。

  >echo 7 | rpn #n @n 4 p 6 @n 3 p * - 23 @n 2 p * + 18 @n * - 24 + 24 /
  57


計算の結果、答えは57でした。上記と同様、rpnプログラムは次のとおりです。ここでは、ファイル名を"circle.rpn"とします。

 【円の領域の数rpnプログラム(circle.rpn)】
  ===(この行の1行下からコピー)===
  #n @n 4 p 6 @n 3 p * - 23 @n 2 p * + 18 @n * - 24 + 24 /
  ===(この行の1行上までコピー)===


プログラムの使い方は数列の順番を指定してrpnファイルの"circle.rpn"を読み込むだけです。では、6番目の数字を計算してみましょう。DOSプロンプトを起動してから、以下のrpn式を入力してください。

  >rpn 7 <circle.rpn
  57


これで、入力の手間を掛けずに計算してくれます。

素数の数列  

 この数列は素数です。自分自身でしか割り切れない数字(1を除く)を素数といいますが、素数を簡単に知る図形はなく、数式もありません。ちなみに問題の9番目の数字は23です。

紀元前3世紀、ユークリッドは素数が無限にあることを証明しましたが、メルセンヌ数(2のn乗-1)を使った素数探索で、現在知られている最大の素数は以下の1700万桁以上のとても長大なものです。

   57885161
  2         - 1


素数の数に関するミステリー

順番に数字を数えていっても素数はいつ発生するか分からず、その数列はまったくの謎なのですが、1からnまでに存在する素数を数えると面白いことが分かります。

最初に1~nまでの間の素数の数について考え付いたのは彼のガウスです。わずか15歳の時で、なんと対数を使った近似式まで作っています。まさに神童です。
  n             素数の数(1~n)
  ============================
  10            4
  100           25
  1000          168
  10000         1229
  100000        9592
  1000000       78498
  10000000      664579
  100000000     5761455
  1000000000    50847534
  10000000000   455052511
  100000000000  4118054813
  1000000000000 37607912018


データが"prime.txt"にあるとします。nをx軸として対数で表し、素数の数をy軸に同様に対数で表すと次のようなグラフになります。

  >xyp -xl,1000000000000 -yl,40000000000 -m <prime.txt
  ^y 4.000003e+010                       *
  |                                  *
  |                               *
  |
  |                            *
  |                         *
  |                     *
  |
  |                  *
  |               *
  |            *
  |        *
  |
  |     *                                x
  |o *                              1e+012
  +-------------------------------------->


見事にべき乗側に従っている様子が分かります。そして、1からnまでにある素数の割合を求めると次のようになります。

  >rpn / <prime.txt
  2.5
  4
  5.95238
  8.1367
  10.4254
  12.7392
  15.0471
  17.3567
  19.6666
  21.9755
  24.2833
  26.5901


1から10までの間に2.5個に1個の割合で素数があることを示します。1から1000000000000までの間なら26.5901個に1個の割合です。これだけなら面白くはないのですが、興味深いのは素数の割合の差で、上の数列のそれぞれの数値の差を計算してみます。

  >rpn / <prime.txt | rpn -c rowdif
  1.5
  1.95238
  2.18432
  2.2887
  2.3138
  2.3079
  2.3096
  2.3099
  2.3089
  2.3078
  2.3068


途中からある値に収束していることが分かります。桁数が1つ増えるたびに素数の見つかる割合が2.3づつ増えていくことを意味します。この傾向はずっと続くので普遍的な性質のようです。

まったくのランダムに見える素数の振る舞いも何らかの規則性があるのではという気を起こさせる興味深い性質ですね。

応用応用コーナーに戻るLinkIcon

情報素数に関しては、応用コーナーにプライバシーは素数が守るがあります。実践コーナー数学アラカルトRSA公開鍵暗号を紙上体験には素数を使った暗号の話が詳しくあります。興味のある人は閲覧ください。

警告rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。

情報foldはユーティリティーパッケージに同梱されています。rowdifはカンタン分析パッケージに同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

記事閲覧ランキング (毎月初更新)

人気記事(過去1ヶ月閲覧数)

広報他にもアプリケーションを公開中!タブ「i~v..」をご覧ください。

※応用コーナーのTOP

紹介 rpnの利用シーンはこちら…

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

i

アプリケーションで楽しもう

広報他にもアプリケーションを公開中!タブ「i~v..」をご覧ください。

※応用コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

ii

アプリケーションで楽しもう

広報他にもアプリケーションを公開中!タブ「i~v..」をご覧ください。

※応用コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

iii

アプリケーションで楽しもう

広報他にもアプリケーションを公開中!タブ「i~v..」をご覧ください。

※応用コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

iv

アプリケーションで楽しもう

広報他にもアプリケーションを公開中!タブ「i~v..」をご覧ください。

※応用コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

v …

アプリケーションで楽しもう

広報他にもアプリケーションを公開中!タブ「i~v..」をご覧ください。

※応用コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

書籍紹介

記事に関連した書籍

本ウェブサイトで扱った話題に関連した書物で、スタッフが実際に読了したものを紹介。

書籍数学の書籍
数の世界は思ったよりもエキサイティング。

  • 書籍統計の書籍
  • ビジネスで統計が使えるととっても有利。

書籍投資の書籍
失敗しない投資には広範囲で実践的な知識が必要。

警告バックスラッシュはエンマークに読み替えてください( IEのみ)。
バックスラッシュとエンマーク

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn試用版と標準版(2kリビジョン)はダブルクォートで囲ってください。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS参照ください。

注意rpnの障害情報はこちら

警告rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。あくまで無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。