Python - prvočísla: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
m (zpet) |
|||
(Není zobrazeno 10 mezilehlých verzí od 2 dalších uživatelů.) | |||
Řádek 1: | Řádek 1: | ||
'''Eratosthenovo síto.''' | '''Eratosthenovo síto.''' | ||
− | Vytvoříme seznam přirozených čísel menších než ''N''. První prvočíslo je 2, označíme tedy v našem sezmanu všechny násobky čísla 2 (která z | + | Vytvoříme seznam přirozených čísel menších než ''N''. První prvočíslo je 2, označíme tedy v našem sezmanu všechny násobky čísla 2 (která z definice nemohou být prvočísly). Přejdeme na další neoznačené číslo v seznamu, tj. na číslo 3 a celý proces opakujeme, dokud není zpracován celý seznam. |
+ | <source lang="python"> | ||
#!/usr/bin/python | #!/usr/bin/python | ||
Řádek 17: | Řádek 18: | ||
n = i*k | n = i*k | ||
− | for i in range( | + | for i in range(1, N): |
if integers[i]: | if integers[i]: | ||
print i, | print i, | ||
print | print | ||
+ | </source> | ||
+ | |||
+ | '''Výpočet prvních ''N'' prvočísel''' | ||
+ | |||
+ | ''Donald E. Knuth: The Art of Computer Programming, Vol 1, Fundamental Algorithms, 3rd ed., Addison-Wesley, 1997, ISBN 0-201-89683-4, str. 147-149 '' | ||
+ | |||
+ | <source lang="python"> | ||
+ | #!/usr/bin/python | ||
+ | |||
+ | prvocisla = [1, 2, 3] # ulozim prvni tri prvocisla | ||
+ | |||
+ | N = 100; | ||
+ | while len(prvocisla) < N: | ||
+ | p = prvocisla[-1] + 2 # [-1]: konec neprazdneho seznamu | ||
+ | k = 1 # test: zacinam prvocislem 2 | ||
+ | while k<len(prvocisla): | ||
+ | n = prvocisla[k] # n je k-te nalezene prvocislo | ||
+ | k = k + 1 | ||
+ | r = p % n | ||
+ | |||
+ | if r == 0: # p neni prvocislo, zkousim p+2 | ||
+ | p = p + 2 | ||
+ | k = 1 | ||
+ | break | ||
+ | |||
+ | if p <= n*n: # p je prvocislo | ||
+ | break; | ||
+ | |||
+ | prvocisla.append(p) # pridam dalsi prvocislo do seznamu | ||
+ | |||
+ | |||
+ | for i in range(len(prvocisla)): | ||
+ | print prvocisla[i], # tisk bez odradkovani ukoncen carkou | ||
+ | |||
+ | print | ||
+ | </source> | ||
+ | |||
+ | [ [[Python|Zpět]] ] | ||
+ | |||
+ | {{Python}} |
Aktuální verze z 20. 4. 2008, 20:41
Eratosthenovo síto.
Vytvoříme seznam přirozených čísel menších než N. První prvočíslo je 2, označíme tedy v našem sezmanu všechny násobky čísla 2 (která z definice nemohou být prvočísly). Přejdeme na další neoznačené číslo v seznamu, tj. na číslo 3 a celý proces opakujeme, dokud není zpracován celý seznam.
#!/usr/bin/python
N = 100
integers = [1]*N
for i in range(2, N):
if integers[i]:
k = 2
n = i*k
while n < N:
integers[n] = 0
k = k + 1
n = i*k
for i in range(1, N):
if integers[i]:
print i,
print
Výpočet prvních N prvočísel
Donald E. Knuth: The Art of Computer Programming, Vol 1, Fundamental Algorithms, 3rd ed., Addison-Wesley, 1997, ISBN 0-201-89683-4, str. 147-149
#!/usr/bin/python
prvocisla = [1, 2, 3] # ulozim prvni tri prvocisla
N = 100;
while len(prvocisla) < N:
p = prvocisla[-1] + 2 # [-1]: konec neprazdneho seznamu
k = 1 # test: zacinam prvocislem 2
while k<len(prvocisla):
n = prvocisla[k] # n je k-te nalezene prvocislo
k = k + 1
r = p % n
if r == 0: # p neni prvocislo, zkousim p+2
p = p + 2
k = 1
break
if p <= n*n: # p je prvocislo
break;
prvocisla.append(p) # pridam dalsi prvocislo do seznamu
for i in range(len(prvocisla)):
print prvocisla[i], # tisk bez odradkovani ukoncen carkou
print
[ Zpět ]