扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
这段时间的工作琐碎繁杂。我不胜其烦,工作间隙便在www.projecteuler.net上做题,权当透气换脑。Project Euler 上的题目都是短小的数字题或词语题。每道题遵循一分钟规则,即程序运行时间不超过1分钟。如果超过了,肯定算法有问题。多数题用几行代码就能解决,不花太多时间,拿得起放得下,不至让人沉迷过深,误了正事,适合休息时自娱自乐。题目做出后,系统便提供相应的论坛链接。看其它人五花八门的解法,也是一大乐趣。间或看到精妙的设计,更是额外的奖励。一般来说C/C++/Pascal(包括Delphi)的程序行数最多,而最短的程序多是用基于栈的语言,比如Forth的变种,J语言。我一般用Ruby。这时就看出单就计算速度而言,Ruby程序(v1.85)和其它语言的巨大差距。比如下面第97题,要求算出质数S8,28433 x 27830457+1,的最后10位数字。顺便说一下,S8是2004年发现的最大non-Mersenne质数。现在已经有更大的了。我先用阳春版的算法,也就是循环7830457次,每次都算出中间结果的最后10位数字。结果cygwin g++编译的程序用了0.66秒(没有打开任何编译优化开关),而Ruby程序用了38.8秒。C++程序运行时,CPU的占用率不到10%,而Ruby轻易上了100%,导致电脑风扇狂转。另外一方面,如果在计算中插入一条打印语句,Ruby的CPU消耗马上降到10%以下。多少可以旁证用Ruby写WEB应用CPU消耗不是问题,因为WEB应用的开销大头还是IO以及网络延迟。
语言 |
C/C++ |
Perl |
Python |
Ruby |
耗时(s) |
0.661 |
2.564 |
6.830 |
38.809 |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者