غربال اراتستن به طور کلی برای محاسبه اول بودن یا نبودن اعداد طبیعی کمتر از 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∑p1p است که در آن p عددی اول و کوچک تر از n است. طبق قضیه دوم مرتن ∑p1p از مرتبه زمانی O(loglogn) است پس زمان اجرای این الگوریتم از مرتبه O(nloglogn) است.
ایده غربال کاربردهای دیگری نیز دارد. برای مثال کد زیر تعداد مقسومالیههای هر عدد کوچکتر از 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(nloglogn) نیست. زمان اجرا برابر n∑n11n است و چون ∑n11n از O(logn) است زمان اجرای کد بالا از مرتبه O(nlogn) است.