Created
May 8, 2020 11:23
-
-
Save westscz/14d5069c5e7db7ca21969d98d2d58d01 to your computer and use it in GitHub Desktop.
primes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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