ruby - ruby 中的欧拉 #3。我对 ruby 有什么不了解的?

标签 ruby primes sieve-of-eratosthenes

Project Euler 3 :

The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?

我不想只是用谷歌搜索这个问题的解决方案,因为我想了解这种语言。基本上,如果我运行它,我现在拥有的东西,我的终端会停止响应。没有错误消息或任何东西。我猜这是一个无限循环?

我正在尝试找到 1000 以下的素因数。我查过埃拉托色尼筛法,但不知道如何写出其中的一个。在此先感谢您提供的所有帮助。

$factors = []
$i = 1

def factor(n)
    $i += 1
    while $i < n do
        $factors << $i if ($i < 1000 && n % $i == 0)
    end
end

factor(600851475143)

puts $factors

最佳答案

您有一个循环,该循环将一直运行,直到 $in 之间的关系以某种定义的方式发生变化。这将有点困难,因为 $in 都不会在循环中偏离它们的初始值。

由于您离解决方案还很远,所以我不确定如何在不实际为您编写的情况下告诉您如何编写。我能做的最好的就是建议看看 the pseudocode并尝试将其逐字转录成 Ruby。

我想指出的另一件事是您对全局变量的依赖。它们几乎从不在 Ruby 中使用,因为它们表明代码存在结构问题。他们几乎总是一个坏主意。不使用类时,仅使用普通变量(ifactors...)而不是全局变量($i$因素...).

关于ruby - ruby 中的欧拉 #3。我对 ruby 有什么不了解的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31334612/

相关文章:

ruby - 如何在 Ruby 中生成随机名称

algorithm - Pascal 中的模幂运算相对较慢

java - 从 600851475143 中找出最大的素数?

c - 在 C 中查找 1 到 300 之间的素数

python - 如何在这个素数筛子的 for 循环中花费更少的时间?

ruby - 如何使用 Ruby API 在 SketchUp 中制作空心圆柱体

ruby - 检查一个方法是否是 rspec 中另一个方法的别名

ruby - 当我运行 "gem list"时, bundler (默认 : 1. 16.2)是什么意思?什么是(默认)部分?

c - 我是否只是证明了埃拉托色尼筛法的效率低于试验划分?

c++ - 大数埃拉托色尼筛法 C++