gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:34 26 4
gpt4 key购买 nike

这段代码找到第一个有 500 个因数的素数。当我运行它时它工作,但我被告知“Prime::new 已过时。使用 Prime::instance 或 Prime 的类方法。”

我认为这意味着我可以用“Prime.instance”替换“Prime.new”,但是当我这样做时,我被告知“下一个是未定义的方法”。由于 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.nextPrime.succ 的别名,但 Prime.next 本身没有实现。根据您创建 Prime 实例的方式,行为会略有不同,这就是为什么您会收到上述不同错误的原因。

关于ruby - Prime.new 已过时 - 如何重写此代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22721356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com