최대 소수 소수 오일러 문제에 대한 작업. for 메소드는 인자의 배열을 살펴보고 소수가 맞는지 테스트합니다.루비가 배열을 건너 뛰는 중 건너 뛰는 것 같습니다
숫자가 작을 때는 작동하지만 테스트 번호 (600851475143)의 경우 소수가 아닌 요소 (104441)가 하나 있지만 for 메서드는 건너 뜁니다. 다른 비 소수는 제거되고 실제 소수는 유지됩니다. 그러나이 한 숫자는 어떤 이유로 건너 뛰기 시작합니다.
나는 루비가 프라임 (Prime) 방법을 가지고 있다는 것을 알고 있으며, 나는이 문제를 푸는 더 웅장한 방법이 있다고 확신한다. 그러나 이것은 정말로 나를 귀찮게했다. 도와 주셔서 감사합니다. 고맙습니다.
def make_array(num)
array = []
factors_array = []
prime_array = []
test_array = []
x = 1
while x <= Math.sqrt(num) #makes array of odd numbers below square root of number
array << x
x += 2
end
array.each do |x| #gets factors of number from array
next if num % x != 0
factors_array << x
end
prime_array = factors_array
puts "#{prime_array} before"
factors_array.each do |i| #gets prime factors from factors
for p in 2...i #checks if numbers are prime numbers
if i % p == 0
test_array << i
not_prime = i
prime_array.delete(not_prime)
end
end
end
puts "#{test_array} test array"
puts "largest prime factor is = #{prime_array.max}"
end
make_array(600851475143)
# answer is 104441, but it should be 6857
각 루프 내의'Array'를 수정하는 것은 권장하지 않습니다.'prime_array'는 단순히 여러분이하고있는 것과 정확히 일치하는'factors_array'에 대한 참조 일 뿐이므로 실제 일어나고있는 것은 루프 중에 일부 숫자를 건너 뛰는 것입니다 . 내 문장을 시각화하려면 루프 뒤에'factors_array'와'prime_array'를보십시오 (힌트 : 그것들은 동일합니다). 어쩌면'prime_array = factors_array.dup'을 시도하십시오 – engineersmnky