2016-07-01 9 views
-1

Eine abundant number ist eine Zahl, für die die Summe ihrer eigentlichen Teiler größer ist als die Zahl selbst. A Project Euler question sagt: "Finden Sie die Summe aller positiven ganzen Zahlen, die nicht als die Summe von zwei reichlich vorhandenen Zahlen geschrieben werden können." Ich sollte erhalten:Ruby-Euler-Projekt Nicht reichlich vorhandene Summen 23 Code

12, 18, 20, 24, etc. 

Der Code ist:

def check_abundant(x) 
    total(x) > x 
end 

def total (x) 
    sum = 1 
    (2..Math.sqrt(x)).each do |i| 
    sum = sum + x + x/i if x%i == 0 && i != Math.sqrt(x) 
    end 
    sum 
end 

def non_abundant_sums 
    abundant_arr = [] 
    s = 0 
    (12..28123).each do |x| 
    if check_abundant(x) 
     abundant_arr << x 
    end 
    (1..28123).each do |x| 
     s = s + x unless abundant_arr.include? (total(x) - x) 
    end 
    s 
    end 
    puts non_abundant_sums 

Wenn ich drucken abundant_arr, bekomme ich

12, 14, 15 
+1

Sie müssen mehr tun, als einen Haufen Code zu werfen und zu sagen, welche Antwort Sie bekommen. Was ist das Problem**? – tadman

+0

Ich schlage vor, dass Sie bearbeiten, um Ihren vorletzten Absatz ganz nach oben zu verschieben. Bitte definieren Sie auch "reichlich Anzahl". –

+0

@CarySwoveland Das ist ein Teil davon. Der andere Teil erklärt genauer, was dies erreichen soll. Was ist "reichlich?" – tadman

Antwort

0

ist hier etwas, um Ihnen den Einstieg. Es wird eine Weile dauern, um zu beenden.

def proper_divisors(num) 
    (1...num).select { |n| num % n == 0 } 
end 

def abundant?(n) 
    proper_divisors(n).reduce(:+) > n 
end 

arr = (12..28123).map { |n| print "." if n % 100 == 0; n if abundant?(n) }.compact 
=> [12, 18, 20, 24, 30, 36, 40...] 
+0

wirklich geschätzt !! – Haohsuanwang