2016-02-15 88 views
-2

我知道類似的問題之前已經被問到過,但它們都顯得如此複雜,我不認爲我那麼遙遠,所以想知道是否有人知道如何調整我的代碼以使它達到工作。我的目標是將一個範圍的所有素數保存到一個數組中,然後打印該數組。下面是我到目前爲止的代碼紅寶石素數程序

prime_array = [] 

(1...100).each do |num| 
    if Math.sqrt(num) % 2 == 0 
    prime_array.push(num) 
    end 
end 

prime_array 
#=> [4, 16, 36, 64] 

我已經嘗試了一些不同的選擇,但都碰了壁,不能看到什麼,我需要做的。我儘可能保持簡單,因爲我覺得很多答案都有些複雜。提前致謝。

+0

來吧,你可以自己做。 – Meier

+0

你允許使用'Class#Prime'庫嗎? –

+0

哈哈@meier我試過我答應!我只是不能解決如何隔離素數! – RuNpiXelruN

回答

1

讓我們來計算的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有正好有兩個除數,1num本身:

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] 

上述代碼可以優化。我把它留給你。

+0

謝謝你這麼多。這樣一個很好的答案。非常感激! – RuNpiXelruN