原文: http://blog.csdn.net/aegoose/article/details/7075997
看到 http://blog.csdn.net/program_think/article/details/7032600 讲了一些求质数的简单算法逻辑, 最近也用ruby玩一些编码实现,想到用ruby实现质数的也是挺有趣.
本文尝试用ruby实现一些简单的求质数算法的简单逻辑, 没有考虑过太多的性能是否能得到真优化问题, 以后有时间再慢慢优化优化. 本人只是通过ruby尝试一下算法的简单逻辑.
1. 算法背景
给定一个整数N, 求N以内的所有质数.
比如: 当 n = 10, 能得到 2 3 5 7的质数.
2. 试除法
即通过简单的除法计算来算出所有质数.
2.1 遍历除因子求质数
遍历每个整数x, x<n, 通过x除以 [ 2..x-1 ]的所有数xi, 如果x不能整数所的xi, 则x为质数.
# divide all fronts
#
# Check 2 to "x-1" is the divisor or not for a number "x"
#
def by_divide_fronts(n)
(2..n).inject([]) do |primes, x|
the_one = false
(2..x-1).each do |xi|
if (x % xi == 0)
the_one = xi
break
end
end
primes << x unless the_one
primes
end
end
2.2 折半遍历因子求质数
遍历每个整数x, x<n, 通过x除以 [ 2..x/2 ]的所有数xi, 如果x不能整数所的xi, 则x为质数.