前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >15年前,一则公路旁的Google的招聘广告

15年前,一则公路旁的Google的招聘广告

作者头像
老肥码码码
发布2020-01-17 16:00:48
8340
发布2020-01-17 16:00:48
举报

点击上方“算法与数据之美”,选择“置顶公众号”

更多精彩等你来!

最近小李在看吴军博士的《浪潮之巅》一书,下册书中讲到了Google公司的发展故事,作者用了其14个不为人知或被公众忽略的侧面来描述这个传奇的公司。而在对Google公司的介绍中,一张插图引起了我的注意,这张插图是Google在101号高速公路旁打的大幅招聘广告。

这15年前的招聘广告竟如此有创意,现在火热得不可开交的表情包等结合高等数学令人耳目一新的创意来源可能就是来源于此吧~

餐厅WIFI密码

真是江山代有人才出,一个更比一个溜啊!

好了言归正传,今天不聊高数题的求解,来聊聊谷歌这道算法题。题意非常明确,找到自然底数e的第一个出现的十位连续数字构成的质数。而找到该质数,加上 .com 就可以进到谷歌的招聘网站。

那么如何做呢?首先我们需要求解得到e的较为准确的值,根据e的指数函数的泰勒展开(Sorry,还是用到了高等数学的知识),我们可以通过该式取x等于1,从而计算得到e的值,并且n取约大,这个值就越准确。

这里需要用到阶乘的计算,通过简单的递归,设置递归出口便可以实现。

代码语言:javascript
复制
def factorial(x):
    if x==1:
        return 1
    else:
        return x*factorial(x-1)

但是问题又出现了,int 和 float的精度都不够,在此小李也投个机取个巧,可以使用 Decimal 库来进行高精度数据的计算。

Decimal 完美利用了 “通过借助整数来表示小数的方式”解决了浮点数不精确的问题,提供十进制数据类型,并且存储为十进制数序列。下面这个函数根据泰勒展开式得到了较为精确的e的值。

代码语言:javascript
复制
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 来减少了求质数的时间复杂度。

代码语言:javascript
复制
def prime(x):
    if x<=1:
        return False
    i=2
    while i*i<=x:
        if x%i==0:
            return False
        i+=1
    return True

有了上述的基本准备之后,我们就可以从e的小数点的第一位开始遍历,每次都取十位进行质数的判断,在发现第一个质数之后便退出循环。

代码语言:javascript
复制
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 ,搓搓小手,激动地在浏览器中输入该网址,

但是很遗憾,其结果如下面的熊猫头所说,

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与数据之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档