了解这个Ruby程序以查找素数

我是Ruby的新手,我一直在阅读这个程序,它找到了我们的素数。

这个例子出现在一本教科书中,在讨论了循环(while&until)之后,它展示了这个例子。

我发现它很混乱。 prime_flag的目的是什么? 为什么J设为2?

(j <= i / 2) – 这个我不明白。

j = j + 1 – 这是什么目的。

我为这个长期问题道歉,但非常感谢任何帮助。 谢谢,麻烦您了。

# Initialize our counter i = 1 # i: [0, 100] while (i <= 100) # Initialize prime flag prime_flag = true j = 2 # Test divisibility of i from [0, i/2] while (j  " to i.to_s + " j ==> " + j.to_s if (i % j == 0) prime_flag = false # break end j = j + 1 end # We found a prime! if prime_flag puts "Prime ==> " + i.to_s" end # Increment the counter i += 1 end 

while循环从i到2的一半计数,并测试它是否是素数。

为什么J设为2?

素数是除了一个和它本身之外没有其他因素的数字。 如果j从1开始,当然1是数字的一个因子。 如果我们包含1,那么代码会认为没有数字是素数,因为它会考虑1个因子。

(j <= i / 2)

while循环检查最多一半的数字。 从技术上讲,您只需要检查数字的平方根。

j = j + 1 – 这是什么目的。

我们需要增加j来继续下一个数字。 该计划基本上是这样的:

  1. j开始,2。
  2. i可以被j整除吗?
    1. 是? 清除主要旗帜。
  3. j设置为下一个数字,3。
  4. i可以被j整除吗?
    1. 是? 清除主要旗帜。
  5. 重复一半i

在你发布的例子中, break被注释掉了,我不知道为什么。 break将是一件好事。 这基本上说,“好吧,我们找到了一个因素,我们不需要继续循环寻找更多因素。

prime_flag的目的是什么?

prime_flag用于跟踪是否找到了i任何因子。 该变量以true开头,因此“是”,假设该数字为素数。 一旦我们找到一个因子,它就会将其设置为假,表明i不是素数。