Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Prime.new已过时-如何重写此代码?_Ruby_Algorithm_Enumerator - Fatal编程技术网

Ruby Prime.new已过时-如何重写此代码?

Ruby 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

此代码查找第一个有500个除数的素数。当我运行它时,它可以工作,但我被告知“Prime::new已经过时了。请使用Prime::instance或Prime的class方法。”

我以为这意味着我可以用“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
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+)