{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "A simple [Sieve of Eratosthenes](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "104743" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import array\n", "\n", "def primes_upto(N):\n", " S = array.array('B')\n", " S.extend(0 for x in range((N >> 3) + 1))\n", " def set_bit(i):\n", " S[i>>3] |= 1<<(i&7)\n", " def is_bit_set(i):\n", " return S[i>>3]&(1<<(i&7)) \n", " p = 2\n", " for p in range(p, N+1):\n", " if not is_bit_set(p):\n", " yield p\n", " k = 0\n", " while True:\n", " i = p*p + k*p\n", " if i > N:\n", " break\n", " set_bit(i)\n", " k += 1\n", "\n", "next(p for i,p in enumerate(primes_upto(1_000_000)) if i+1==10001)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.7.4" }, "title": "10001st prime" }, "nbformat": 4, "nbformat_minor": 2 }