/* The Sieve of Erathostenes Prints all prime numbers up to PRIME_MAX */ #define PRIME_MAX 100 chan count = [0] of { int }; byte tries = 2; proctype sieve(chan c; int prime) { int i, haschild; end: do :: c?i -> if :: (i%prime) -> if :: !haschild -> /* found a new prime */ printf("MSC: %d\n", i); haschild++; chan child = [0] of { int }; run sieve(child, i); :: else -> child!i fi; :: else /* i is divisible by prime */ fi od } init { run sieve(count, 2); do :: (tries < PRIME_MAX) -> count!tries; tries++ :: (tries >= PRIME_MAX) -> break od }