Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: prvocisla

Aktivity
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
Odpovídá na Peter Kristín
Erik Šťastný:22.5.2018 21:28

Ještě můžeš přidat odmocninu viz.

https://cs.wikipedia.org/…vo_s%C3%ADto

 
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.