eratosthenovo sito
In [2]:
tabulka = list(range(21))
In [4]:
tabulka = [ 0 for _ in range(21)]
In [5]:
tabulka #0- nema delitela, inac najmensi delitel, vzynam ma od 2
Out[5]:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
In [7]:
# vyskrtame delitele 2, teda zapiseme si tam dvojku
cislo = 2
hodnota = cislo*2
while hodnota < len(tabulka):
if tabulka[hodnota] == 0:
tabulka[hodnota] = cislo
hodnota += cislo
In [8]:
tabulka
Out[8]:
[0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2]
In [9]:
# vyskrtame delitele 2, teda zapiseme si tam dvojku
cislo = 3
hodnota = cislo*2
while hodnota < len(tabulka):
if tabulka[hodnota] == 0:
tabulka[hodnota] = cislo
hodnota += cislo
tabulka
Out[9]:
[0, 0, 0, 0, 2, 0, 2, 0, 2, 3, 2, 0, 2, 0, 2, 3, 2, 0, 2, 0, 2]
In [10]:
tabulka[6]
Out[10]:
2
In [16]:
n = 100
tabulka = [ 0 for _ in range(n+1)]
for cislo in range(2, n+1):
if tabulka[cislo] == 0:
hodnota = cislo*2
while hodnota < len(tabulka):
if tabulka[hodnota] == 0:
tabulka[hodnota] = cislo
hodnota += cislo
tabulka
Out[16]:
[0, 0, 0, 0, 2, 0, 2, 0, 2, 3, 2, 0, 2, 0, 2, 3, 2, 0, 2, 0, 2, 3, 2, 0, 2, 5, 2, 3, 2, 0, 2, 0, 2, 3, 2, 5, 2, 0, 2, 3, 2, 0, 2, 0, 2, 3, 2, 0, 2, 7, 2, 3, 2, 0, 2, 5, 2, 3, 2, 0, 2, 0, 2, 3, 2, 5, 2, 0, 2, 3, 2, 0, 2, 0, 2, 3, 2, 7, 2, 0, 2, 3, 2, 0, 2, 5, 2, 3, 2, 0, 2, 7, 2, 3, 2, 5, 2, 0, 2, 3, 2]
In [17]:
for i in range(2, n):
print(f'{i}: {tabulka[i]}' if tabulka[i] > 0 else f'{i} je prvocislo')
2 je prvocislo 3 je prvocislo 4: 2 5 je prvocislo 6: 2 7 je prvocislo 8: 2 9: 3 10: 2 11 je prvocislo 12: 2 13 je prvocislo 14: 2 15: 3 16: 2 17 je prvocislo 18: 2 19 je prvocislo 20: 2 21: 3 22: 2 23 je prvocislo 24: 2 25: 5 26: 2 27: 3 28: 2 29 je prvocislo 30: 2 31 je prvocislo 32: 2 33: 3 34: 2 35: 5 36: 2 37 je prvocislo 38: 2 39: 3 40: 2 41 je prvocislo 42: 2 43 je prvocislo 44: 2 45: 3 46: 2 47 je prvocislo 48: 2 49: 7 50: 2 51: 3 52: 2 53 je prvocislo 54: 2 55: 5 56: 2 57: 3 58: 2 59 je prvocislo 60: 2 61 je prvocislo 62: 2 63: 3 64: 2 65: 5 66: 2 67 je prvocislo 68: 2 69: 3 70: 2 71 je prvocislo 72: 2 73 je prvocislo 74: 2 75: 3 76: 2 77: 7 78: 2 79 je prvocislo 80: 2 81: 3 82: 2 83 je prvocislo 84: 2 85: 5 86: 2 87: 3 88: 2 89 je prvocislo 90: 2 91: 7 92: 2 93: 3 94: 2 95: 5 96: 2 97 je prvocislo 98: 2 99: 3
In [22]:
print(*[i for i, hodnota in enumerate(tabulka) if hodnota == 0 and i > 1])
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
In [ ]: