2014-03-28 1 views
0

이 코드는 500 개의 제수가있는 첫 번째 소수를 찾습니다. 내가 그것을 실행하면 작동하지만, 나는 "Prime :: new는 쓸데없는 것입니다. 프라임 :: 인스턴스 또는 클래스 프라임 메서드를 사용하십시오."Prime.new는 더 이상 사용되지 않습니다 -이 코드를 다시 작성하는 방법?

나는 이것이 'Prime.new'를 'Prime.instance'로 대체 할 수 있다고 생각했지만, 그렇게 할 때 '다음은 정의되지 않은 방법'이라고합니다. 프라임은 열거 자이어야하므로이 오류가 발생하는 이유는 무엇입니까? 이 정답은 76576500.

require 'mathn' 

primer = Prime.new 
primes = [ primer.next ] 
seed = 500 
n  = (seed * (seed + 1))/2 
i  = seed + 1 

def count_prime_factors primer, primes, n 
    total = 1 
    max = Math.sqrt(n).to_i 

    while primes.last < max 
    primes << primer.next 
    end 

    primes.each do |i| 
    count = 0 
    while n % i == 0 
     n = n/i 
     count += 1 
    end 
    if count > 0 
     total *= count + 1 
    end 
    end 

    total 
end 

while(count_prime_factors(primer, primes, n) < seed) 
    n += i 
    i += 1 
end 

puts n 

답변

3

Prime.instancePrime.newprimes.succprimes.next의 각 인스턴스를 교체하려고합니다.


the source code for the Prime class을 참조하십시오. Prime.next에는 Prime.succ이라는 별칭이 지정되어 있지만 Prime.next에는 구현 자체가 없습니다. 이 동작은 Prime의 인스턴스를 작성하는 방법에 따라 약간 달라 지므로 위의 다른 오류가 발생합니다.

2

지금은 Prime.new (ruby 2.2+) 대신 Prime::EratosthenesGenerator.new을 사용해야합니다.

관련 문제