让我们来计算的7(质数)和8(合数)的平方根:
Math.sqrt(7) #=> 2.6457513110645907
Math.sqrt(8) #=> 2.8284271247461903
这并不能真正帮助,不是吗?显然,你不能通过计算其平方根来确定一个数是否是素数。
相反,你必须检查数字的除数。从Wikipedia:
甲素数(或素)为natural number大于1,其具有比图1和本身之外,没有其他正divisors。
让我们确定的7除数:(使用模运算符%
)
7 % 1 #=> 0 <- 7 is divisible by 1
7 % 2 #=> 1
7 % 3 #=> 1
7 % 4 #=> 3
7 % 5 #=> 2
7 % 6 #=> 1
7 % 7 #=> 0 <- 7 is divisible by 7
这满足上面的定义 - 7是一个素数。
现在,让我们确定的8除数:
8 % 1 #=> 0 <- 8 is divisible by 1
8 % 2 #=> 0 <- 8 is divisible by 2
8 % 3 #=> 2
8 % 4 #=> 0 <- 8 is divisible by 4
8 % 5 #=> 3
8 % 6 #=> 2
8 % 7 #=> 1
8 % 8 #=> 0 <- 8 is divisible by 8
8有两个额外的除数2和4。因此,8 不一个素数。
在Ruby中,你可以使用select
找到除数:
(1..7).select { |d| 7 % d == 0 } #=> [1, 7]
(1..8).select { |d| 8 % d == 0 } #=> [1, 2, 4, 8]
最后,这里是你的Ruby代码变种来检查,如果给定数量num
有正好有两个除数,1
和num
本身:
prime_array = []
(1...100).each do |num|
if (1..num).select { |d| num % d == 0 } == [1, num]
prime_array.push(num)
end
end
prime_array
#=> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
上述代码可以优化。我把它留给你。
来吧,你可以自己做。 – Meier
你允许使用'Class#Prime'库吗? –
哈哈@meier我试过我答应!我只是不能解决如何隔离素数! – RuNpiXelruN