package simulation.sieve.try1; /* * Basic iterative Sieve of Eratosthenes */ class Sieve1 { def eratosthenes(a_limit) { def primes = [] use (IntegerCatagory) { sieve(a_limit) { primeNumber -> primes << primeNumber } } primes } def sieve(a_limit, a_foundPrime) { /* * Create initial list of numbers */ def numbers = [] a_limit.times { number -> numbers << number } /* * For each factor in list of numbers */ (2..a_limit).each { factor -> (0..numbers.size()).each { index -> def number = numbers[index] if (numbers[index] > 0 && number.hasFactor(factor)) { numbers[index] = 0 } else if (number == factor) { a_foundPrime(factor) } } } } } class IntegerCatagory { def static boolean hasFactor(Integer a_number, Integer a_factor) { a_number != a_factor && a_number % a_factor == 0 } } ...