======غربال اراتستن====== غربال اراتستن به طور کلی برای محاسبه اول بودن یا نبودن اعداد طبیعی کمتر از n به کار می‌رود. این روش به این صورت است که ابتدا فرض می‌کنیم تمام اعداد بین ۲ تا n همگی اول هستند. سپس با شروع از دو هر بار که به عددی اول می‌رسیم مطمئن می‌شویم که مضارب آن اول نیستند و با حرکت بر روی مضارب آن, آن‌ها را از اول بودن در می‌آوریم. ====پیاده سازی==== def sieve(n): # n must be greater than 1 is_prime = [True] * n is_prime[0] = False is_prime[1] = False for i in range(2, n): if is_prime[i]: for j in range(2 * i, n, i): is_prime[j] = False return is_prime ====پیچیدگی زمانی==== زمان اجرای کد بالا برابر $n\sum_{p}\frac{1}{p}$ است که در آن p عددی اول و کوچک تر از n است. طبق قضیه دوم مرتن $\sum_{p}\frac{1}{p}$ از مرتبه زمانی $O(log log n)$ است پس زمان اجرای این الگوریتم از مرتبه $O(n log log n)$ است. ====دیگر کاربرد‌ها==== ایده غربال کاربرد‌های دیگری نیز دارد. برای مثال کد زیر تعداد مقسوم‌الیه‌های هر عدد کوچک‌تر از n را محاسبه می‌کند. def sieve(n): d = [0] * n for i in range(1, n): for j in range(i, n, i): d[j] += 1 return d پیچیدگی این کد اما دیگر برابر $O(n log log n)$ نیست. زمان اجرا برابر $n\sum_{1}^{n}\frac{1}{n}$ است و چون $\sum_{1}^{n}\frac{1}{n}$ از $O(log n)$ است زمان اجرای کد بالا از مرتبه $O(n log n)$ است.