这段代码找到第一个有500个除数的素数。当我运行它时,它工作了,但是我被告知“prime::new已经过时了。使用prime::prime的实例或类方法。“
我认为这意味着我可以用Prime.instance替换Prime.new,但是当我这样做的时候,我被告知“next是一个未定义的方法”既然prime应该是一个枚举器,为什么我会得到这个错误?正确答案是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
最佳答案
尝试用Prime.new
替换Prime.instance
,用primes.next
替换每个primes.succ
实例。
见the source code for the Prime
class。您会发现Prime.next
被别名为Prime.succ
,但Prime.next
本身没有实现行为会根据创建Prime
实例的方式发生一些变化,这就是为什么上面会出现不同的错误。
关于ruby - Prime.new已过时-如何重写此代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22721356/