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

时间:2018-04-08 00:59:01

标签: ruby primes

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

这个例子来自一本教科书,在谈到循环之后(而& 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 <= i / 2)
    # puts " i ==> " 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

1 个答案:

答案 0 :(得分:1)

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

  

为什么J设为2?

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

  

(j <= i / 2)

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

  

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

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

  1. 从2开始j
  2. i可以j整除吗?
    1. 是?清除主要旗帜。
  3. j设置为下一个号码,3。
  4. i可以j整除吗?
    1. 是?清除主要旗帜。
  5. 重复一半i
  6. 在您发布的示例中,break已被注释掉,我不确定原因。 break将是一件好事。这基本上说,&#34;好的,我们找到i的一个因素,我们不需要继续循环寻找更多因素。

      

    prime_flag的目的是什么?

    prime_flag用于跟踪是否找到i的任何因素。变量开始为真,所以&#34;是&#34;,假设数字是素数。一旦我们找到一个因子,它就会将其设置为false,表示i不是素数。