Skip to content

Instantly share code, notes, and snippets.

@westscz
Created May 8, 2020 11:23
Show Gist options
  • Save westscz/14d5069c5e7db7ca21969d98d2d58d01 to your computer and use it in GitHub Desktop.
Save westscz/14d5069c5e7db7ca21969d98d2d58d01 to your computer and use it in GitHub Desktop.
primes
from time import process_time
def primes(num):
def prim(n):
return len([i for i in range(2, n) if n % i == 0]) == 0
return [i for i in range(2, num) if prim(i)]
def prim(num):
def prim(n):
try:
next(i for i in range(2, n) if n % i == 0)
return False
except StopIteration:
return True
return [i for i in range(2, num) if prim(i)]
def sito(n): # liczby pierwsze <= n
"""Sito Eratostenesa - liczby pierwsze nie większe od n."""
L = [0] + n * [1]
for p in range(2, n): # wystarczy p do sqrt(n)
q = p * p
if q > n:
break
if L[p] == 1: # liczba pierwsza
# wyrzucam p*p, p*(p+1), p*(p+2),...
for i in range(q, n+1, p):
L[i] = 0
return [i for i in range(1, n+1) if L[i]==1]
def timer(func, *args):
t = process_time()
func(*args)
return process_time()-t
print(primes, sum(timer(primes, 1000) for _ in range(100))/100)
print(prim, sum(timer(prim, 1000) for _ in range(100))/100)
print(sito, sum(timer(sito, 1000) for _ in range(100))/100)
"""
<function primes at 0x108381e18> 0.021768230000000013
<function prim at 0x1085d3ea0> 0.0039751800000000295
<function sito at 0x1085d3f28> 0.00010580999999998397
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment