| (!*******************************************************
  * Mosel Example Problems                              *
  * ======================                              *
  *                                                     *
  * file prime.mos                                      *
  * ``````````````                                      *
  * Example for the use of the Mosel language           *
  * (Calculation of prime numbers)                      *
  *                                                     *
  * Implements the Sieve of Eratosthenes: each time a   *
  * prime number is found all of its multiples are      *
  * deleted from the set of remaining numbers.          *
  *                                                     *
  * (c) 2008 Fair Isaac Corporation                     *
  *     author: S. Heipcke, 2001                        *
  *******************************************************!)
model Prime                    ! Start a new model
parameters
 LIMIT=100                     ! Search for prime numbers in 2..LIMIT
end-parameters
declarations
 SNumbers: set of integer      ! Set of numbers to be checked
 SPrime: set of integer        ! Set of prime numbers
end-declarations
 SNumbers:={2..LIMIT} 
 
 writeln("Prime numbers between 2 and ", LIMIT, ":")
 n:=2
 repeat
   while (not(n in SNumbers)) n+=1
   SPrime += {n}
   i:=n
   while (i<=LIMIT) do
     SNumbers-= {i}
     i+=n
   end-do
 until SNumbers={}    
 writeln(SPrime)
 
end-model
 |