Naučit se SQL Naučit se SQL
Pouze tento týden až 80% sleva na SQL jazyky
Zamiluj si programování! Až 80 % bodů na prémiový obsah zdarma. Více informací

Diskuze: prvocisla

Python Python prvocisla American English version English version

Aktivity (1)
Avatar
Peter Kristín:22.5.2018 19:50

Ahojte,
snazim sa vypocitat prvocisla, problem je, ze je to strasne pomale, tak sa chcem spytat ci na to idem uplne zle ...
Vopred vdaka

cislo = 100000
prvocisla = []
for i in range(1, cislo + 1):
if ((2 ** i) - 2) % i == 0:
prvocisla.append(i)

 
Odpovědět 22.5.2018 19:50
Avatar
Peter Kristín:22.5.2018 20:06

update:
vylucil som parne cisla ...

cislo = 100000
prvocisla = []
for i in range(1, cislo + 1, 2):
if ((2 ** i) - 2) % i == 0:
prvocisla.append(i)

 
Nahoru Odpovědět 22.5.2018 20:06
Avatar
 
Nahoru Odpovědět 22.5.2018 21:28
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:23.5.2018 8:03

Musis zacit uvazovat logicteji :)
Rikas, ze vyloucis suda.
range(1, cislo + 1, 2)
Ano, tohle vylouci suda. Ale, je nejaky duvod, proc tam takovou podminku vubec davat? Nebylo by jednodussi
n = i * 2 + 1
A nebylo by jednodussi misto nasobeni dvojkou pouzit bitovou rotaci?
n = (i >> 1) + 1
A nebylo by lepsi misto range pouzit normalni cyklus, jako while?

# https://www.tutorialspoint.com/python/python_while_loop.htm
#!/usr/bin/python

count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1

print "Good bye!"

Co dela range? Vytvori array, ktera obsahuje cisla od-do. Proc vytvaret array? Mozna, ze python uz ma takovou array predpripravenou a jen na ni presunuje ukazatel, nezkoumal jsem vnitrni funkcionalitu.
Jenze pozor. Netlacit do while funkce, pokud tam nemusi byt. Stava se, ze nekdo tam prida treba i<strlen(str). Ono to funguje, ale pokazde znovu a znovu pocita delku retezce. Coz je zbytecne, pokud se celou smycku nemeni :) Zbytecna brzda navic. To ale v tomhle pripade nehrozi.

Editováno 23.5.2018 8:04
 
Nahoru Odpovědět 23.5.2018 8:03
Avatar
Jiří Havelka:23.5.2018 8:07

Hledání prvočísel je obecně pomalá záležitost, existují ale rychlejší postupy.
třeba https://cs.wikipedia.org/…vo_s%C3%ADto

Editováno 23.5.2018 8:08
 
Nahoru Odpovědět 23.5.2018 8:07
Avatar
Odpovídá na Peter Mlich
Peter Kristín:23.5.2018 15:10

Peter Mlich: nie uplne rozumiem ...
Bitovu rotaciu ani neviem ci python pozna, nasobenie 2kou tam myslim nemam, 2 ** i je umocnenie 2 na i-tu.
Kazdopadne skusim inu metodu, napr. to eratosove sito.

 
Nahoru Odpovědět 23.5.2018 15:10
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24.5.2018 7:37

Ok. Informatiku nestuduji. Jen jsem chtel rici, je liche cislo dostanu i bez slozitych mat. operaci, jako

n = (i >> 1) + 1 # = i * 2 + 1 pro i=0,1,2...(max<<1) => 1, 3, 5, ...
 
Nahoru Odpovědět 24.5.2018 7:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.