片来源:Tucker Nichols
作者 Kenneth Chang
翻译 Lineker
数学家们新近发现了最大的已知素数,它比先前出现的最大素数几乎多出了500万位。
在中央密苏里大学(University of Central Missouri)卫星校园里的一座计算机实验室中,一台在其他人看起来毫不起眼的台式电脑,即143室中的5号机,将74,207,281个2乘在一起,再减去1。之后,它通过检验发现这个计算出来的数字,不能被除1和它自身之外的其他任何整数所整除——这正是素数的定义。
这个巨大的数字只能以指数记数法表示出来,即274,207,281-1。
先前出现的最大素数为257,885,161-1,其位数约为1700万位。
这是互联网梅森素数大搜索(Great Internet Mersenne Prime Search,简称Gimps)发现的第15个素数。Gimps是一个志愿项目,已经运作了20年。“我一直对素数很感兴趣”,乔治·沃尔特曼(George Woltman)说,他在退休之后发起了Gimps计划,“我有大把的空闲时间。”
梅森素数是指那些可以被表示为2n-1的数,其中“n”为整数。它们以马林·梅森(Marin Mersenne)的名字来命名。梅森是一位法国神学家兼数学家,他在17世纪早期曾对这类数字展开过研究。
举例来说,3就是梅森素数,它可以记成2n-1的形式,即22-1。
不过,并不是所有能够以这种形式表达的整数都是素数。譬如当n=4时,所得结果为24-1=15,15不是素数,因为它可以被3和5整除。
整数越大,素数越分散,但总归会有一个更大的素数存在,只是要找到这个素数会困难得多。数学家们到现在总共才发现49个梅森素数。
Gimps充分利用了分布于世界各地电脑的闲置计算能力。志愿者下载好免费的计算软件,当电脑没有在被使用时,软件会在后台悄悄运行。
中央密苏里大学的数学教授柯蒂斯·库珀(Curtis Cooper)是早期热衷者之一,他早在1997年就加入了Gimps计划。目前,他已经为大学两个校区里的800台电脑都装上了计算程序。库珀博士既从事数论领域的研究,也在教授计算机科学课程。“Gimps计划相当于两个领域的联姻。”他说。
这所大学的电脑之前已经发现了三个梅森素数,最近的一次是在2013年。
143室的5号电脑满负荷运行了31天才完成了计算,最终它得出了274,207,281-1的结果是个素数的结论。事实上,早在去年的9月17日,它就已经尽职尽责地将这一结果报告给了西雅图的一台电脑服务器,后者专门用于协调全世界Gimps电脑的计算结果。
但没人注意到。
由于服务器出点了小故障,本来早就该发送给库珀博士和Gimps项目管理员的电子邮件并没有发送出来。
直到今年1月7日,服务器管理员亚伦·布罗瑟尔(Aaron Blosser)在进行例行维护时才发现了上述情况。他用一台运行速度快得多的电脑核实了这一结果,并在两天之后通报给了库珀博士。
经过进一步检验之后,这个新发现于1月19日被正式公布了出来。
素数对于密码学之类的领域非常关键,不过新发现的这个梅森素数太过巨大,至少短期内不会有什么实际应用价值。(Gimps软件却有着实际应用,它在揭示因特尔Skylake新型处理器存在的一个缺陷的过程中,发挥了关键作用。)
这个巨大的素数究竟有多大呢?
我测量了一下自己记数的速度:四秒钟大约能写出10位数。如果纸张和墨水足够,再假设我写字的手能保持这样的速度——实际肯定不可能,那么写出274,207,281-1这个数的22,338,618位数,我就要花费三个多月的时间。
如果要把这些位数打印出来,根据字号的不同,它们大约可填满6000至7000张打印纸。
或许你会疑惑:如果有个素数被电脑发现了,但一直没有人注意到,那它算是真的被发现了吗?答案是否定的。官方宣布该梅森素数的发现日期为1月7日,即布罗瑟尔先生发现上述结果的时间,而不是电脑得出结果的时间。
不过,库珀博士表示,这台电脑将会被保留起来,就像之前发现那三个梅森素数的那些电脑一样。
“电脑不会开口说话,”他说。“它可不知道自己现在已经是名声在外了。”
原文地址
http://www.nytimes.com/2016/01/22/science/new-biggest-prime-number-mersenne-primes.html?_r=0
到了一年毕业季,又有很多大学生从大学毕业,来到社会。今天主要是给这些小伙伴一些面试的小技巧,总归一句多学习一些也是有用处的,临时抱佛脚也要抱才有啊,所以今天给大家分享两个小问题,现在的前端程序员需求已经不是能用html布局,或是用javascript写个特效这么轻松了,也因为现在的初级前端泛滥,所以各大公司对前端的面试要求也开始逐步提高,特别是对于基础知识的扎实程度,能否灵活运用所学的知识这些方面给予的考验也会相对的严格!
现在就来看看!
考虑下面的代码:
答案:
上面代码的目的在于检测JavaScript的一个重要概念:闭包。对于每一个JavaScript开发者来说,如果你想在网页中编写5行以上的代码,那么准确理解和恰当使用闭包是非常重要的。
好了,回到上面的代码。控制台会输出两次You clicked element #NODES_LENGTH,其中#NODES_LENGTH等于nodes的结点个数。由于闭包中变量的值不是静态的,i的值并不是添加click事件处理器时的值(比如,当给第一个button添加click事件处理器时i为0,给第二个添加时i为1)。当for循环结束时,变量i的值等于nodes的长度。因此事件被执行时,控制台会输出变量i当前的值,即等于nodes的长度。
如果有正在学习前端,不知道怎么学习,学习效率不高或者不知道行业前景,就业前景的也可以来一下我们头条前端群477149581,有大神,有小白,每晚都会分享一些企业级的知识和面试技巧。
问题2:算法
写一个判断质数的isPrime()函数,当其为质数时返回true,否则返回false。
答案
我认为这是在面试中最常问到的一个问题。尽管这个问题反复出现并且也很简单,但是从面试者提供的答案中能很好地看出面试者的数学和算法能力水平。
首先, 因为JavaScript不同于C或者Java,因此你不能信任传递来的数据类型。如果面试官没有明确地告诉你,你应该询问他是否需要做输入检查,还是不进行检查直接写函数。严格上说,应该对函数的输入进行检查。
需要记住的第二点,负数不是质数。同样的,1和0都不是,因此,要对这些数字做检测。另外,2是唯一的既是偶数又是质数的数字。没有必要用一个循环来验证4,6,8。再者,如果一个数字不能被2整除,它同样也不能被4,6,8等整除,因此你的循环需要跳过这些数字。可以采取其他一些更明智的优化手段,我这里采用的是适用于大多数情况的。例如,如果一个数字不能被5整除,它也不会被5的倍数整除。所以,没有必要检测10,15,20等等。
最后一点,你不需要检查比输入数字的开方还要大的数字。我感觉人们会遗漏掉这一点,并且也不会因为此而获得消极的反馈。但是,展示出这一方面的知识会给你额外加分。
现在你具备了这个问题的背景知识,下面是总结以上所有考虑的解决方案:
头条号里有许多web前端学习视频/源码,企业常用特效/案例/项目,敬请关注!
码可以做很多很有趣的事情,有些很简短的代码,会让人印象深刻,而且可以从中学到一些东西。有人发起了这样一个话题称“有哪些短小却令人惊叹的 JavaScript 代码?”
百度美女程序员
这个话题,引起很多很多人的关注,大家也都非常踊跃的分享代码,下面,W3Cschool小师妹就为大家分享其中三段代码。
代码片段一:
分享者分享了这样一段代码,也没有说什么。但是网友中还是有很多大牛的,看看这些大牛是怎么评论这段代码的:
网友一:很有趣呀!
网友二:打开了新世界。
网友三:实现简单,脑洞很大啊。
网友四:这个迷宫能走得通吗?能不能写一段代码,显示能连通的路径。
代码片段二:
分享者称,真的可以执行的,还把我吓坏了。网友是怎么看待这段代码的呢?
网友一:惊呆了,为啥这都能执行啊?
网友二:我对自己的孤陋寡闻而惭愧。。。刷新我对代码的认知。
网友三:简直丧心病狂!
网友四:运行结果竟然是alert("Hello, JavaScript")。
网友五:很强势。
代码片段3:
分享者称,这个正则表达式可以测质数,道理就是构造一个 1111111,强行让正则引擎实现一个除法。
网友对这段代码有什么看法呢?
网友一:相当惊艳!!!只是执行效率有点低啊,而且n的位数多了会越界。
网友二:想了好一会儿才明白。
网友三:stack上搜了下才理解。
上面分享的三段代码,看起来非常精简。就是这样精简的代码,竟然是可运行的,着实令人惊叹。不知道各位大侠,上面的三段代码,你觉得怎样,可以在下面留言哦。
学编程技术,就到W3Cschool,如果你喜欢我们的文章,可以点击右上角关注我们;如果你想看到更多IT界的资讯,可以加我们的公众号。
公众号:w3cschoolcn
*请认真填写需求信息,我们会在24小时内与您取得联系。