本文又名《看看我的破机器能算多少个梅森数出来》
代码如下,
我算到(1..14)这里就不敢再增加range的范围了,(1..15)我的台式机跑了半天也没有跑出结果,看来我的电脑太慢了。
最后我得到的梅森数数组是:
我只算到了M4,1不算梅森数。
对照梅森数的发现史,我发现历史上从M5开始的发现者才被历史记录,M4及以前的发现者都被遗忘了,或者估计其它的成就没有多少,碌碌无为。以前算到M4的那哥们是个无名氏,苦命的孩儿啊。我估计大部分人也都差不多会碌碌无为终了一生。目前我只能算到这一位,等有空用Erlang改进下看看,看看自己能否进入被历史记住的人物名单。
我说完了,你们自己也算算吧,看你们排行老几。
PS:我那个is_prime?这个判断素数的算法是很浪费性能的,不过它不会错过一个漏网之鱼,比Miller-Rabin算法好在这里,但是太慢!
梅森素数列表:[url]http://zh.wikipedia.org/w/index.php?title=梅森素数&variant=zh-cn[/url]
[img]/upload/attachment/91989/90421bb9-6415-3942-bd9f-730b0ac7a490.png[/img]
《纯粹娱乐,别太计较,不过很好玩^-^》
代码如下,
mersennes=[]
def is_prime?(n)
# 这里是用了费马小定理,很慢很慢!
(2..n-1).each{|y| y**(n-1)%n==1?true:(return false)}
end
(1..13).each do |n|
m=(2**n-1)
mersennes<<m if is_prime?(m)
end
#mersennes=(1..13).inject([]){|arr,x|is_prime?(2**x-1)?arr:(arr<<2**x-1)}
#上面这个写法,2**x要计算两次,写法好看,但性能很低
p mersennes
我算到(1..14)这里就不敢再增加range的范围了,(1..15)我的台式机跑了半天也没有跑出结果,看来我的电脑太慢了。
最后我得到的梅森数数组是:
[1, 3, 7, 31, 127, 8191]
我只算到了M4,1不算梅森数。
对照梅森数的发现史,我发现历史上从M5开始的发现者才被历史记录,M4及以前的发现者都被遗忘了,或者估计其它的成就没有多少,碌碌无为。以前算到M4的那哥们是个无名氏,苦命的孩儿啊。我估计大部分人也都差不多会碌碌无为终了一生。目前我只能算到这一位,等有空用Erlang改进下看看,看看自己能否进入被历史记住的人物名单。
我说完了,你们自己也算算吧,看你们排行老几。
PS:我那个is_prime?这个判断素数的算法是很浪费性能的,不过它不会错过一个漏网之鱼,比Miller-Rabin算法好在这里,但是太慢!
梅森素数列表:[url]http://zh.wikipedia.org/w/index.php?title=梅森素数&variant=zh-cn[/url]
[img]/upload/attachment/91989/90421bb9-6415-3942-bd9f-730b0ac7a490.png[/img]
《纯粹娱乐,别太计较,不过很好玩^-^》