Sieve of Eratosthenes - Try 1
2
esumerfd
A possible implementation of the Sieve of Eratosthenes for generating prime numbers below some limit.
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
}
}
...
/*
* 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
}
}
...






There are currently no comments for this snippet.