我試圖用一個程序來找到600851475143.最大的主要因素。這是項目歐拉這裏最大的主要因素:發現的600851475143
: http://projecteuler.net/problem=3我第一次使用此代碼嘗試這
#Ruby solution for http://projecteuler.net/problem=2
#Prepared by Richard Wilson (Senjai)
#We'll keep to our functional style of approaching these problems.
def gen_prime_factors(num) # generate the prime factors of num and return them in an array
result = []
2.upto(num-1) do |i| #ASSUMPTION: num > 3
#test if num is evenly divisable by i, if so add it to the result.
result.push i if num % i == 0
puts "Prime factor found: #{i}" # get some status updates so we know there wasn't a crash
end
result #Implicit return
end
#Print the largest prime factor of 600851475143. This will always be the last value in the array so:
puts gen_prime_factors(600851475143).last #this might take a while
這對於小數字來說很不錯,但是對於大數字來說,它需要很長的時間(以及大量的內存)。
不久前我就讀了大學微積分,但我很生疏,並沒有跟上我的數學。
我不想要一個直線上升的答案,但我想指出對資源或告訴我需要學習,以實現一些我在我的節目周圍可見的算法。
也許你應該對以下問題添加到您的擾流板,對學生的好處:(1)證明(我會使用歸納),在while循環中,'max%test == 0'意味着'test.prime?'是真的。 (2)是否可能計算'test.prime?'比計算'max%test == 0'更快?對於包含兩種測試的價值,這有什麼說法? (3)如果將'max'更改爲600851475145,會發生什麼情況?你怎麼能解決這個問題? – rici 2013-05-12 19:09:27
需要'主要'啓用:'600851475145.prime_division'。結果:'[[71,1],[839,1],[1471,1],[6857,1]]'。 – steenslag 2013-05-12 21:51:45
哈哈,很好。是的,正確的方法是根據rici的評論(也就是擾流之後的第一個練習)來消除明確的素數檢查。 – 2013-05-12 23:07:52