''' primechecker.py Jeff Ondich, 9 May 2012 A small sample class to be tested by unittest-based test cases. See primetests.py for the rest of this sample. ''' class PrimeChecker: def __init__(self, maxInteger): self.maxInteger = 0 self.initializeSieve(maxInteger) def initializeSieve(self, maxInteger): ''' Initializes a Sieve of Eratothsenes up to but not including maxInteger. Precondition: maxInteger is an integer greater than 1. ''' assert type(maxInteger) == type(0) assert maxInteger > 1 if maxInteger > self.maxInteger: self.maxInteger = maxInteger self.sieve = [0] * self.maxInteger self.sieve[0] = 1 self.sieve[1] = 1 currentPrime = 2 while currentPrime < self.maxInteger: k = currentPrime * 2 while k < self.maxInteger: self.sieve[k] = 1 k += currentPrime currentPrime += 1 while currentPrime < self.maxInteger and self.sieve[currentPrime] == 1: currentPrime += 1 def getPrimesBelow(self, n): ''' Returns the list of primes strictly less than n, sorted in increasing order. ''' self.initializeSieve(n) primes = [k for k in range(n) if self.sieve[k] == 0] return primes def isPrime(self, n): if type(n) != type(0) or n < 2: return False self.initializeSieve(n + 1) return self.sieve[n] == 0