Edit:
Finally watched the whole thing. Enjoyed the end. Made me smile. :-)
"I visualize a time when we will be to robots what dogs are to humans, and I'm rooting for the machines.". - Claude Shannon.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | def is_list_empty(list_of_numbers): return len(list_of_numbers) == 0 def get_smallest_number_if_exists(list_of_numbers): if not is_list_empty(list_of_numbers): return min(list_of_numbers) return None def get_greatest_number_if_exists(list_of_numbers): if not is_list_empty(list_of_numbers): return max(list_of_numbers) return None def remove_number_from_list(number, list_of_numbers): if number in list_of_numbers: list_of_numbers.remove(number) def remove_multiples_of_number_from_list(number, list_of_numbers): multiple_of_number = number greatest_number = get_greatest_number_if_exists(list_of_numbers) while greatest_number is not None and multiple_of_number <= greatest_number: remove_number_from_list(multiple_of_number, list_of_numbers) multiple_of_number += number def sieve_of_eratosthenes (greatest_number_to_check): ''' Returns list of primes smaller or equal to greatest_number_to_check ''' smallest_prime = 2 buffer_of_numbers = range(smallest_prime, greatest_number_to_check+1) primes = [] while True: prime = get_smallest_number_if_exists(buffer_of_numbers) if prime is None: break primes.append(prime) remove_multiples_of_number_from_list(prime, buffer_of_numbers) return primes def test(): assert sieve_of_eratosthenes(-1) == [] assert sieve_of_eratosthenes(0) == [] assert sieve_of_eratosthenes(1) == [] assert sieve_of_eratosthenes(2) == [2] primes_smaller_than_10 = [2, 3, 5, 7] assert sieve_of_eratosthenes(10) == primes_smaller_than_10 primes_smaller_than_11 = [2, 3, 5, 7, 11] assert sieve_of_eratosthenes(11) == primes_smaller_than_11 primes_smaller_than_100 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] assert sieve_of_eratosthenes(100) == primes_smaller_than_100 test() # ############ # # main program # # ############ # N = 100 primes = sieve_of_eratosthenes(N) print 'primes smaller or equal to', N, ':', primes |





