(!****************************************************** Mosel User Guide Example Problems ================================= file prime3ior.mos `````````````````` Prime number algorithm for large values of LIMIT. - Using 'raw' driver - (c) 2008 Fair Isaac Corporation author: S. Heipcke, 2006 *******************************************************!) 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 "raw:" NumP as "shmem:NumP" SPrime as "shmem:SPrime" end-initializations end-model