尋找素數的東西是很好解釋在那裏[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中支持您的表達式!不這樣做的是偶爾在高級編程中很有用,但它幾乎總是隻是一個等待發生的錯誤。它具有允許內置編譯器將表達式轉換爲快速代碼的好處。
典型的功課。 [中平凡googleable](http://rosettacode.org/wiki/Sieve_of_Eratosthenes#Tcl) – kostix
http://rosettacode.org/wiki/Primality_by_trial_division#Tcl –