+++ /dev/null
-/*
- The Sieve of Eratosthenes (c. 276-196 BC)
- Prints all prime numbers up to MAX
-*/
-#define MAX 25
-
-mtype = { number, eof };
-
-chan root = [0] of { mtype, int };
-
-proctype sieve(chan c; int prime)
-{ chan child = [0] of { mtype, int };
- bool haschild;
- int n;
-
- printf("MSC: %d is prime\n", prime);
-end: do
- :: c?number(n) ->
- if
- :: (n%prime) == 0 ->
- printf("MSC: %d = %d*%d\n", n, prime, n/prime)
- :: else ->
- if
- :: !haschild -> /* new prime */
- haschild = true;
- run sieve(child, n);
- :: else ->
- child!number(n)
- fi;
- fi
- :: c?eof(0) ->
- break
- od;
- if
- :: haschild ->
- child!eof(0)
- :: else
- fi
-}
-
-init
-{ int n = 2;
-
- run sieve(root, n);
- do
- :: (n < MAX) -> n++; root!number(n)
- :: (n >= MAX) -> root!eof(0); break
- od
-}