(!*******************************************************
* 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
|