The most efficient solution to this problem is the so called "Sieve of Eratosthenes". For more information on prime numbers and
the method see:
Sieve of Eratosthenes
another nice one is :
Prime number theorem
See the solutions provided by the seminar members (all scripts are working properly) for comparision:
Sieve of Eratosthenes download here
#!/usr/local/bin/wish -f # =============================================================== # JANUS-SR Janus Speech Recognition Toolkit # --------------------------------------------------- # Advanced Lab Speech Recognition and Understanding # # Author : tanja@cs.cmu.edu # Module : Eratosthenes.tcl # Date : Feb 07 2001 # # Remarks : determines the first N primes # # =============================================================== # N should be 100 # Prime number theorem says that for large n the density of primes is n/log n # (see http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/Prime_numbers.html) # setting n = 1000 we should be on the save side # ------------------------ # initialize # ------------------------ set n 1000 set a(1) 1 for {set i 2} {$i <= $n} {incr i} { set a($i) 1 } # ------------------------ # walk thru the sieve # ------------------------ set p 2 while {[expr $p * $p] <= $n} { set j [expr $p * 2] while {$j <= $n} { set a($j) 0 set j [expr $j + $p] } incr p while {$a($p) == 0} { incr p } } # ------------------------ # output the first 100 # ------------------------ set cnt 1 for {set i 2} {$i < $n} {incr i} { if {$a($i) == 1} {puts "${cnt}. prime: $i"; incr cnt} if {$cnt > 100} {exit} } exit
Last modified: Fri Feb 23 11:30:07 EST 2001
Maintainer: tanja@cs.cmu.edu.