寻找素数在外面已经得到了很好的解释[1] [2],所以我将更多地解释一下你应该如何思考以找出解决方案。像这样,我希望你以后能够更好地自己回答这些问题。
首先,这里有两个问题。一个问题是如何发现一个特定的数字是否是素数,另一个问题是如何找到给定范围内的所有素数。这两者确实是联系在一起的:我们可以用一个解决方案来解决另一个问题。让我们从这样做开始。(这是伪代码,不是 Tcl!)
# Start at 2; 1 is defined to be a non-prime
for every i in 2 up to 100
if (isPrime i)
print i, " is prime"
else
print i, " is not prime"
end if
end for
接下来,我们需要一种机制isPrime
。它最好写成命名子程序(Tcl 中的一个过程)。我们将在这里使用最简单的技术,通过头脑简单的试验师进行素性测试。
function isPrime (integer x) : boolean
# Note, when x is 2, this loop does *zero* steps
for every i in 2 up to x-1
if (x mod i = 0)
# Early exit from function; we know the answer to do more work!
return false
end if
end for
return true
end function
这效率不高(您可以更早地停止,您可以保留已经找到的较小素数的缓存,并且仅检查这些素数等),但它会起作用。现在您需要做的就是将上面的内容转换为 Tcl。有一个非常直接的一对一转换策略。
但重要的部分是将整体挑战分解成更简单的部分,你可以用一种简单到不会出错的方式来解决这些问题。
旁注:您还应该在 Tcl 中支持您的表达式!不这样做有时在高级编程中很有用,但它几乎总是只是一个等待发生的错误。它的好处是允许内置编译器将表达式转换为快速代码。