最近小李在看吴军博士的书《浪潮之巅》。第二本书讲述了谷歌的发展故事。公众知道或忽略的方面描述了这家传奇公司。在谷歌的介绍中,一张插图引起了我的注意。这张插画是谷歌在101号公路旁的大型招聘广告,15年前的招聘广告太有创意了,现在火爆的表情包结合高等数学可能是令人耳目一新的创意源泉~真是一代又一代人才辈出,一个是比另一个好。!好了,言归正传,今天不说解高等数学题,说说谷歌的算法题。题意很清楚,求自然底e的前十位连续数字组成的素数。并找到素数,加上.com,就可以进入谷歌的求职网站了。那怎么办呢?首先,我们需要求解出更准确的e值。根据e的指数函数的泰勒展开(不好意思,还是用到高等数学的知识),我们可以用这个公式取x等于1来计算e的值,并且n越大越多这个值将是准确的。这里需要计算阶乘,可以通过简单递归设置递归出口来实现。deffactorial(x):ifx==1:return1else:returnx*factorial(x-1)但是问题又出现了,int和float的精度不够,小李这里也碰碰运气了,你可以使用Decimal库来计算高精度数据。Decimal完美利用“用整数表示小数”来解决浮点数不精确的问题,提供了一个decimal数据类型,并将其存储为一个十进制数的序列。下面的函数根据泰勒展开得到一个更准确的e值。defget_e(n):decimal.getcontext().prec=10000e=decimal.Decimal('1.0')foriinrange(1,n):e+=1/decimal.Decimal(factorial(i))print(e)returnstr(e)得到求素数的e后,我们需要完成一个判断素数的函数,很容易,条件i*i<=x用于求素数.时间复杂度。defprime(x):ifx<=1:returnFalsei=2whilei*i<=x:ifx%i==0:returnFalsei+=1returnTrue经过上面的基本准备,我们就可以了从e的小数点第一位开始遍历,每次取十位判断素数,找到第一个素数后退出循环。deffind(n):e=get_e(n)foriinrange(2,len(e)-9):number=e[i:i+10]ifprime(int(number)):print(number)break这样,我们运行程序,搓着小手,兴冲冲地在浏览器中输入网址,就可以得到答案7427466391,可惜,结果就像熊猫头下面说的,
