次のコードがあります
#!/usr/bin/ruby -w
c = 1
d = Array.new(6965) #6965 is the amount of abundant numbers below 28123 of which all numbers greater than that can be written as the sum of two abundant numbers
f = 0
while c < 28124 # no need to go beyond 28123 for this problem
a = 0
b = 1
i = true # this will be set to false if a number can be written as the sum of two abundant numbers
while b <= c/2 + 1 # checks will go until they reach just over half of a number
if c % b == 0 # checks for integer divisors
a += b # sums integer divisors
end
b += 1 # iterates to check for new divisor
end
if a > c # checks to see if sum of divisors is greater than the original number
d << c # if true it is read into an array
end
d.each{|j| # iterates through array
d.each{|k| # iterates through iterations to check all possible sums for number
# false is declared if a match is found. does ruby have and exit statement i could use here?
i = false if c - j - k == 0
}
}
c+=1 # number that we are checking is increased by one
# if a number cannot be found as the sum of two abundant number it is summed into f
f += c if i == true
end
puts f
次のコードでは、配列に対して 2 回反復を実行しようとするd
と、次のエラーが発生します。
euler23:21:inブロック (2 レベル) in ' from euler23:20:in block in ' from euler23:19:in '
-': nil can't be coerced into Fixnum (TypeError)
from euler23:21:ineach'
from euler23:20:ineach'
from euler23:19:in
私は Ruby に詳しくないので、これを解決するためのさまざまな試みは無駄でした。含める必要のあるライブラリがいくつかあるような気がしますが、私の調査ではライブラリについて言及されておらず、途方に暮れています。このコードは、2 つの豊富な数の合計として書ききれないすべての数を合計することを目的としています。Project Euler からの23 番目の質問です。