Ruby Prime.new已过时-如何重写此代码?
此代码查找第一个有500个除数的素数。当我运行它时,它可以工作,但我被告知“Prime::new已经过时了。请使用Prime::instance或Prime的class方法。” 我以为这意味着我可以用“Prime.instance”替换“Prime.new”,但当我这样做时,我被告知“next是一个未定义的方法”。既然prime应该是一个枚举数,为什么会出现这个错误?正确答案是76576500Ruby Prime.new已过时-如何重写此代码?,ruby,algorithm,enumerator,Ruby,Algorithm,Enumerator,此代码查找第一个有500个除数的素数。当我运行它时,它可以工作,但我被告知“Prime::new已经过时了。请使用Prime::instance或Prime的class方法。” 我以为这意味着我可以用“Prime.instance”替换“Prime.new”,但当我这样做时,我被告知“next是一个未定义的方法”。既然prime应该是一个枚举数,为什么会出现这个错误?正确答案是76576500 require 'mathn' primer = Prime.new primes = [ pr
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
require'mathn'
primer=Prime.new
primes=[primer.next]
种子=500
n=(种子*(种子+1))/2
i=种子+1
def计数素数因子素数,素数,n
总计=1
max=Math.sqrt(n).to_i
而primes.last
尝试用Prime.instance
替换Prime.new
,并用primes.succ
替换primes.next
看。您将发现
Prime.next
别名为Prime.succ
,但Prime.next
本身没有实现。根据创建Prime
实例的方式,行为会发生一些变化,这就是为什么会出现上述不同错误。尝试将Prime.new
替换为Prime.instance
,并将primes.next
替换为primes.succ
看。您将发现
Prime.next
别名为Prime.succ
,但Prime.next
本身没有实现。根据创建Prime
实例的方式,行为会发生一些变化,这就是为什么会出现上述不同错误的原因。现在,您应该使用Prime::EratosthenesGenerator.new
而不是Prime.new
(ruby 2.2+),您应该使用Prime::EratosthenesGenerator.new
而不是Prime.new
(ruby 2.2+)