数列の謎解きで頭の体操
最近の就職活動では筆記試験の重要性が増してきています。どんなに面接の評価が高くても試験結果が悪ければ内定はもらえません。
筆記試験には性格や語学力を問うものなどがありますが、その対極に計算力を問うものがあります。その中でも頻出するのが数列を提示して次の数字を予測させるような問題です。「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
数列どおりに増えていることがわかりますね。段々、三角形を大きくしていけば答えが求まりますが、描くのが大変ですね。そこで、この数列の数式が威力を発揮します。
T = ---------
2
nは1から始まる自然数です。この数式のnに値を入れれば答えがすぐに求まります。例えば、問題の答えは8番目の数値なので、8を数式に引き渡せばOKです。rpnなら一行で計算できます。
36
計算の答えは36でした。使ったrpn式は、rpnプログラムにするともっとすっきりします。プログラムは次のとおりで、コピーしてrpnファイルにしてください。ファイル名は"triangle.rpn"とします。
===(この行の1行下からコピー)===
#n @n @n 1 + * 2 /
===(この行の1行上までコピー)===
プログラムの使い方は簡単で、数列の順番を指定してrpnファイルの"triangle.rpn"を読み込むだけです。早速、8番目の数字を計算してみましょう。DOSプロンプトを起動してから、以下のrpn式を入力してください。
36
数列の何番目の数であっても、この調子で答えられますね。
フィボナッチ数の数列
この数列はフィボナッチ数です。前と前の前の数を加えたものが次の数字になります。
フィボナッチ数に関しては、応用コーナーにウサギとフィボナッチがあります。また、黄金比率との関係については、実践コーナーの数学アラカルトに黄金比率とフィボナッチ数列として詳しくあります。興味のある人は閲覧ください。
最初の一つ目は例外として、前の○を黒に置き換えて長い辺の個数だけ長方形を伸ばすと図形でフィボナッチ数を得ることができます。
1 1 2 ○○ ●●○○○ ●●●●●
○○ ●●○○○ ●●●●●
3 5 ○○○○○ …
○○○○○
○○○○○
○○○○○
○○○○○
8
長い辺の個数を数えると、きちんと数列どおりになっていますね。これを続けて長方形を描いていけばよいのですが、三角数同様に大変です。図形によらない方法でも前と前の前の値を覚えておく必要があります。それでも、rpnなら計算するのは比較的簡単です。
1 1 2 3 5 8 13 21
フィボナッチ数列が生成されています。もちろん、これでも答えは求まるのですが、ちょっとスマートさに欠けますね。そこで、出てくるのがフィボナッチ数列の数式です。
φ - (- φ) 1 + √5
F = ----------- ※φ= -------
√5 2
φは黄金比と呼ばれる言わば定数です。この数式を使えば問題を解くのは簡単です。問題では9番目の数値なので、9をrpn式に引き渡せばOKです。
34
答えは34。これで何番目の数字でも答えられます。ただし、何度も同じrpn式を入力するのは骨が折れます。そこで三角数同様、rpnプログラムにしておきましょう。コピーしてrpnファイルにしてください。ここでは、ファイル名を"fibonaci.rpn"としています。
===(この行の1行下からコピー)===
#n 1 5 r + 2 / #p @p @n p @p m @n m p - 5 r /
===(この行の1行上までコピー)===
プログラムの使い方は数列の順番を指定してrpnファイルの"fibonaci.rpn"を読み込むだけです。では、9番目の数字を計算してみましょう。DOSプロンプトを起動してから、以下のrpn式を入力してください。
34
これなら、何度計算しても入力が楽ですね。100番目の数字を計算するのも簡単です。
円の領域数の数列
この数列は円の領域の数を表しています。グラフで説明しないと分かりづらいですね。
.. .. .. .. .. ..
.. .. .. 1 .. ●. . 2 ..
.. .. .. .. .. . . . . ..
. . . . . . . ● . . . . ●
● 1 . ● . . . . . . 1 . .
.. .. .. .. .. 4 . . ..
.. .. .. 2 .. .. . . 3 ..
.. .. .. .. .. . . ..
........ ........ ....●..
円周のそれぞれの点からすべての点に直線を引いたときに、分断される円内の領域の数を示しています。これも図形を描き続ければ答えを得られます。と言っても問題の7番目、つまり7つの点を結ぶ直線を引くのも大変なので、数式を使います。
n - 6n + 23n - 18n + 24
R = -------------------------- ※Rは領域の数、nは点の個数
24
複雑に見える式ですが、rpnで計算すると簡単に答えが出てきます。
57
計算の結果、答えは57でした。上記と同様、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式を入力してください。
57
これで、入力の手間を掛けずに計算してくれます。
素数の数列
この数列は素数です。自分自身でしか割り切れない数字(1を除く)を素数といいますが、素数を簡単に知る図形はなく、数式もありません。ちなみに問題の9番目の数字は23です。
紀元前3世紀、ユークリッドは素数が無限にあることを証明しましたが、メルセンヌ数(2のn乗-1)を使った素数探索で、現在知られている最大の素数は以下の1700万桁以上のとても長大なものです。
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軸に同様に対数で表すと次のようなグラフになります。
^y 4.000003e+010 *
| *
| *
|
| *
| *
| *
|
| *
| *
| *
| *
|
| * x
|o * 1e+012
+-------------------------------------->
見事にべき乗側に従っている様子が分かります。そして、1からnまでにある素数の割合を求めると次のようになります。
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個の割合です。これだけなら面白くはないのですが、興味深いのは素数の割合の差で、上の数列のそれぞれの数値の差を計算してみます。
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づつ増えていくことを意味します。この傾向はずっと続くので普遍的な性質のようです。
まったくのランダムに見える素数の振る舞いも何らかの規則性があるのではという気を起こさせる興味深い性質ですね。
素数に関しては、応用コーナーにプライバシーは素数が守るがあります。実践コーナーの数学アラカルトのRSA公開鍵暗号を紙上体験には素数を使った暗号の話が詳しくあります。興味のある人は閲覧ください。
rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。
foldはユーティリティーパッケージに同梱されています。rowdifはカンタン分析パッケージに同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。