15年前,一則公路旁的Google的招聘廣告

2021-10-01 19:15:21 字數 1878 閱讀 5052

最近小李在看吳軍博士的《浪潮之巔》一書,下冊書中講到了google公司的發展故事,作者用了其14個不為人知或被公眾忽略的側面來描述這個傳奇的公司。而在對google公司的介紹中,一張插圖引起了我的注意,這張插圖是google在101號高速公路旁打的大幅招聘廣告。

這15年前的招聘廣告竟如此有創意,現在火熱得不可開交的表情包等結合高等數學令人耳目一新的創意**可能就是**於此吧~

真是江山代有人才出,乙個更比乙個溜啊!

好了言歸正傳,今天不聊高數題的求解,來聊聊谷歌這道演算法題。題意非常明確,找到自然底數e的第乙個出現的十位連續數字構成的質數。而找到該質數,加上 .com 就可以進到谷歌的招聘**。

那麼如何做呢?首先我們需要求解得到e的較為準確的值,根據e的指數函式的泰勒展開(sorry,還是用到了高等數學的知識),我們可以通過該式取x等於1,從而計算得到e的值,並且n取約大,這個值就越準確。

這裡需要用到階乘的計算,通過簡單的遞迴,設定遞迴出口便可以實現。

def factorial(x):

if x==1:

return 1

else:

return x*factorial(x-1)

但是問題又出現了,int 和 float的精度都不夠,在此小李也投個機取個巧,可以使用 decimal 庫來進行高精度資料的計算。

decimal 完美利用了 「通過借助整數來表示小數的方式」解決了浮點數不精確的問題,提供十進位制資料型別,並且儲存為十進位制數序列。下面這個函式根據泰勒展開式得到了較為精確的e的值。

def get_e(n):

decimal.getcontext().prec=10000

e=decimal.decimal('1.0')

for i in range(1,n):

e =1/decimal.decimal(factorial(i))

print(e)

return str(e)

得到了這個e要找質數之後,我們還需要完成乙個用來判斷質數的函式,這個就非常容易了,其中用了條件 i*i<=x 來減少了求質數的時間複雜度。

def prime(x):

if x<=1:

return false

i=2while i*i<=x:

if x%i==0:

return false

i =1

return true

有了上述的基本準備之後,我們就可以從e的小數點的第一位開始遍歷,每次都取十位進行質數的判斷,在發現第乙個質數之後便退出迴圈。

def find(n):   

e=get_e(n)

for i in range(2,len(e)-9):

number=e[i:i 10]

if prime(int(number)):

print(number)

break

由此我們執行該程式便可以得到答案 7427466391 ,搓搓小手,激動地在瀏覽器中輸入該**,

但是很遺憾,其結果如下面的熊貓頭所說,

一年前的今天

2003年10月15日,中國在酒泉衛星發射中心進行首次載人航天發射。9時整,長征 二號f型火箭點火公升空。按計畫,飛船執行在軌道傾角42.4度 近地點高度200公里 遠地點高度350公里的橢圓軌道上,實施變軌後,進入343公里的圓軌道。首位 的中國太空人是來自遼寧的空軍飛行員楊利偉,今年38歲,大學...

一年前的心情 給hxx

xx 在家玩的好嗎?暑假又增加了幾磅啊?開個玩笑 我現在還在南京活著呢 不過tomorrow i will go back home 這幾天在這裡 早晨醒來 陽光直照在臉上 沒有風 人就像裝在袋子裡一般 還有打濕了一半的枕頭 總是指示著10點半的 小新 鬧鐘.傍晚趴在窗台上仰望夕陽殘缺的天空,鳥兒在...

遞迴水題(一年前寫的)

include using namespace std int n,k,i,a 31 void excel voidf int n k表示2的冪次 n n a k n被減到0時結束 if k 0 n 0 printf 2 0 n 0說明不是末尾,則後面還有乙個 號 if k 0 n 0 printf...