我是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
答案 0 :(得分:1)
while
循环从i
的2到一半进行计数并测试它是否为素数。
为什么J设为2?
素数是除了一个和它本身之外没有其他因素的数字。如果j
从1开始,当然1是数字的一个因素。如果我们包含1,那么代码会认为没有数字是素数,因为它会认为1是一个因子。
(j <= i / 2)
while循环检查最多一半的数字。从技术上讲,您只需要检查数字的平方根。
j = j + 1 - 这是什么目的。
我们需要增加j
以继续下一个数字。该计划基本上是这样做的:
j
。i
可以j
整除吗?
j
设置为下一个号码,3。i
可以j
整除吗?
i
在您发布的示例中,break
已被注释掉,我不确定原因。 break
将是一件好事。这基本上说,&#34;好的,我们找到i
的一个因素,我们不需要继续循环寻找更多因素。
prime_flag的目的是什么?
prime_flag
用于跟踪是否找到i
的任何因素。变量开始为真,所以&#34;是&#34;,假设数字是素数。一旦我们找到一个因子,它就会将其设置为false,表示i
不是素数。