convert from svn repository: remove tags directory
[lttv.git] / trunk / verif / Spin / Test / eratosthenes
CommitLineData
0b55f123 1/*
2 The Sieve of Eratosthenes (c. 276-196 BC)
3 Prints all prime numbers up to MAX
4*/
5#define MAX 25
6
7mtype = { number, eof };
8
9chan root = [0] of { mtype, int };
10
11proctype sieve(chan c; int prime)
12{ chan child = [0] of { mtype, int };
13 bool haschild;
14 int n;
15
16 printf("MSC: %d is prime\n", prime);
17end: do
18 :: c?number(n) ->
19 if
20 :: (n%prime) == 0 ->
21 printf("MSC: %d = %d*%d\n", n, prime, n/prime)
22 :: else ->
23 if
24 :: !haschild -> /* new prime */
25 haschild = true;
26 run sieve(child, n);
27 :: else ->
28 child!number(n)
29 fi;
30 fi
31 :: c?eof(0) ->
32 break
33 od;
34 if
35 :: haschild ->
36 child!eof(0)
37 :: else
38 fi
39}
40
41init
42{ int n = 2;
43
44 run sieve(root, n);
45 do
46 :: (n < MAX) -> n++; root!number(n)
47 :: (n >= MAX) -> root!eof(0); break
48 od
49}
This page took 0.024768 seconds and 4 git commands to generate.