瞎扯淡 ruby 竟然连这都有 不蛋定了

shooter · 2013年07月31日 · 最后由 luikore 回复于 2013年07月31日 · 3675 次阅读

Prime

尼嘛 好不淡定

require 'prime'

Prime.take(10) #=> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
Prime.take_while {|p| p < 10 } #=> [2, 3, 5, 7]
Prime.prime?(19) #=> true

这点很奇怪,按照 ruby 的思想,sqrt 是 Numeri class 的一个方法 实际却是 Math 的类方法

Math.sqrt(600851475143)
=> 775146.0992245268 

600851475143.sqrt
NoMethodError: undefined method `sqrt' for 600851475143:Bignum

标准库啥都有哦,例如矩阵求行列式,LUP 分解,解线性方程组,求共轭矩阵...

另外 require 'mathn' 就把整数四则运算变成有理数运算了

不过 prime 那个库分解质因数的 prime_division 实现太素,比 mathematica 的 FactorInteger 慢很多。其实对大整数可以改进成 GNF sieve 算法的... 大整数的素性判定也没用上 Rabin-Milner 法...

标准库太大是好还是不好呢...

#2 楼 @blacktulip 功能丰富比较好,别看 prime.rb 那么多功能,ruby 实现加起来就一个 500 来行的文件

#3 楼 @luikore 刚试了下 Prime.to_a 结果不动了...

#4 楼 @blacktulip 是啊,无穷 enumerator 怎么能 to_a... 不过 ruby 的 Prime 是 lazy 的

Prime.each{|p| puts p}
Prime.map.lazy{|p| p * p}.each{|p| puts p}
需要 登录 后方可回复, 如果你还没有账号请 注册新账号