(!****************************************************** Mosel User Guide Example Problems ================================= file prime3io.mos ````````````````` Prime number algorithm for large values of LIMIT. *** Not intended to be run standalone - run from runprimeio.mos *** (c) 2008 Fair Isaac Corporation author: S. Heipcke, 2006, rev. Apr. 2011 *******************************************************!) model "Prime (array)" uses "mmjobs" parameters LIMIT=20000 ! Search for prime numbers in 2..LIMIT end-parameters declarations INumbers = 2..LIMIT ! Set of numbers to be checked SNumbers: array(INumbers) of boolean SPrime: set of integer ! Set of prime numbers STOPMOD = 2 ! "Stop submodel" user event MODREADY = 3 ! "Submodel ready" user event end-declarations send(MODREADY,0) ! Send "model ready" event writeln("Prime numbers between 2 and ", LIMIT, ":") n:=2 repeat SPrime += {n} ! n is a prime number i:=n while (i<=LIMIT) do ! Remove n and all its multiples SNumbers(i):= true i+=n end-do while (n <= LIMIT and SNumbers(n)) n+=1 until (n>LIMIT or not isqueueempty) NumP:= getsize(SPrime) initializations to "bin:shmem:resdata" NumP SPrime end-initializations end-model