{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Oregon Curriculum Network](http://www.4dsolutions.net/ocn)
\n", "[Discovering Math with Python](Introduction.ipynb)\n", "\n", "\n", "## LAB: Sieve of Eratosthenes\n", "
\n", "
\n", "
\n", "
\n", "\"Sieve\n", "
\n", "\n", "\n", "The end goal is to verify the included program is getting all the primes it should be. \n", "\n", "To this end, primes_file.txt contains the first 10,000 prime numbers, up to over 104,000.\n", "\n", "First, lets see how we read in the file and turn it into a simple Python list, of primes only. This published list came from [The Prime Pages](http://primes.utm.edu/)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "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\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo('V08g_lkKj6Q')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "with open(\"primes_file.txt\", \"r\") as primes:\n", " output = []\n", " for line in primes.readlines()[3:]: # skip first 4 lines\n", " if line.strip() == 'end.':\n", " break\n", " for column in line.split():\n", " num = int(column.strip())\n", " output.append(num) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*output* will be global since the above cell is run top level, not inside the scope of a function. Checking the last few entries below, to confirm everything worked:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]\n", "[104677, 104681, 104683, 104693, 104701, 104707, 104711, 104717, 104723]\n" ] } ], "source": [ "# verify we have the data we want\n", "print(output[0:10]) # first 10\n", "print(output[-10: -1]) # last 10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So far I'm feeling pretty good about this one. \n", "\n", "Lets check on primes to 1000. Up to 100,000 is left as an exercise to the more committed." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Eliminating multiples of: 2\n", "Eliminating multiples of: 3\n", "Eliminating multiples of: 5\n", "Eliminating multiples of: 7\n", "Eliminating multiples of: 11\n", "Eliminating multiples of: 13\n", "Eliminating multiples of: 17\n", "Eliminating multiples of: 19\n", "Eliminating multiples of: 23\n", "Eliminating multiples of: 29\n", "Eliminating multiples of: 31\n", " 2, 3, 5, 7, 11, 13, 17, 19, 23, 29\n", " 31, 37, 41, 43, 47, 53, 59, 61, 67, 71\n", " 73, 79, 83, 89, 97, 101, 103, 107, 109, 113\n", "127, 131, 137, 139, 149, 151, 157, 163, 167, 173\n", "179, 181, 191, 193, 197, 199, 211, 223, 227, 229\n", "233, 239, 241, 251, 257, 263, 269, 271, 277, 281\n", "283, 293, 307, 311, 313, 317, 331, 337, 347, 349\n", "353, 359, 367, 373, 379, 383, 389, 397, 401, 409\n", "419, 421, 431, 433, 439, 443, 449, 457, 461, 463\n", "467, 479, 487, 491, 499, 503, 509, 521, 523, 541\n", "547, 557, 563, 569, 571, 577, 587, 593, 599, 601\n", "607, 613, 617, 619, 631, 641, 643, 647, 653, 659\n", "661, 673, 677, 683, 691, 701, 709, 719, 727, 733\n", "739, 743, 751, 757, 761, 769, 773, 787, 797, 809\n", "811, 821, 823, 827, 829, 839, 853, 857, 859, 863\n", "877, 881, 883, 887, 907, 911, 919, 929, 937, 941\n", "947, 953, 967, 971, 977, 983, 991, 997\n" ] } ], "source": [ "from math import sqrt as root2, floor\n", "\n", "def eratosthenes(n):\n", " the_max = floor(root2(n)) # upper limit of eliminator\n", " sieve = list(range(0, n+1))\n", " eliminator = 2\n", " while True:\n", " if eliminator > the_max:\n", " break\n", " print(\"Eliminating multiples of:\", eliminator)\n", " for k in range(2 * eliminator, n + 1, eliminator):\n", " sieve[k] = 0\n", " while sieve[eliminator + 1] == 0:\n", " eliminator += 1\n", " else:\n", " eliminator = sieve[eliminator + 1]\n", " \n", " # shrink me down (compact the sieve) \n", " sieve = [n for n in sieve if n != 0][1:] # list comprehension!\n", " return sieve\n", "\n", "# apply fancy formatting to output\n", "output = eratosthenes(1000)\n", "for row in range(0, len(output), 10):\n", " print(\", \".join(map(lambda s: str.format(\"{:3d}\", s), output[row:row+10])))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we're interested in checking our list against the elements obtained from primes_file.txt, up to and including our largest prime. \n", "\n", "We may simply count the primes we have, chop off that many from *output* and perform and equality test..." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n" ] } ], "source": [ "how_many = len(output)\n", "check_list = output[:how_many] # get as many from the published pool as are in the sieve\n", "print(output == check_list) # check for equality" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below is a screen shot of what the sieve algorithm looks like on the Codesters development platform, used with 5th and 6th graders in some schools. You may actually run the code in Codesters by visiting [this link](https://www.codesters.com/preview/efa131bd8f0b43d0a25e22f37c729c9b/).\n", "\n", "
\n", "
\n", "
\n", "\n", "
\n", "\"Codesters\n", "
" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }