讓我們來計算的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