先日、知人に一枚の写真が送られてきた。
彼が読んでる本に、Googleの有名な入社問題が紹介されているらしい。君にはこの問題が解けるかと。自身はなかったけど、チャレンジしたくなってきた。もちろん、自力で解いてみせようと。
ちなみに、この問題を時、その答えである数列をURLに入力するとGoogleの入社フォームが出てきたらしい。その後、追加問題をいくつ解いた人には、ほとんど入社が認められたらしい。
まず、問題を見てみよう。
{First 10-digit prime found in consecutive digits of e}
{自然対数eの連続する桁で、最初に出てくる10桁の素数}
なるほど。まず、eを探してみよう。すぐその数列が掲載されているサイトを見つけることができた。この問題が出された10数年前にも、eの数列をネット検索で探すのはそれほど難しくなかっただろう。
https://www.math.utah.edu/~pa/math/e.html
解き方のアルゴリズムを下記に記す。実に簡単である。
(1) こちらのeの数字で連続する数列を作成する。
(2) e=2.71828 18284 59045 23536であるから、
最初は、71828 18284を取り出し、素数であるかどうかを調べる。
次に、一桁移動し 1828 18284 5と取り出し、素数であるか調べる。
(3) 素数であると判断した場合、その値を出力する。
案外簡単ですね。しかし、(1)と(2)にちょっとだけのプログラミングのテクニックが必要である。ここでは、慣れているMATLABを用いて、プログラムを書くことにした。
MATLABプログラムは、下記のリンクににアップロードした。mainのプログラム(making_e_number_10keta.m)と素数判別プログラム(myprime2.m)の2つのファイルで構成されている。
https://wireless-square.com/wp-content/uploads/2018/11/google_problem.zip
計算は、2018年仕様のデスクトップだと数分で出てくる。10数年前だとPentium 4の時代だから、結果がでるまで1時間以上かかったと思う。
答えの最初の10桁の素数は7427466391である。
連続して出力すると、このように10桁の素数が見つかる。
this is the prime number
7427466391
7413596629
6059563073
この問題が本当に意味しているのは、無限数の概念である。今回は10桁の素数を探す問題であったが、例え「11桁の素数」を探そうとしても、必ずその答えが出てくることはわかっている。問題を「100桁の素数」と置き換えても、自然対数eの中のどこかから必ず出てくるはず。
今度は、このように問題を変えてみよう。
芥川龍之介の「羅生門」の全文を10進数を数字に変換する。ここで、自然対数eの連続する桁で、「羅生門」の全文と一致する数列があるか探そうとする。これはかなり大変な計算になるが、その数列は必ず存在する。
これが無限数の概念である。実に面白い。