Halloweenská akce! Na stránce s dobitím bodů zadej dole kód STRASIDELNYCH20 a získej porci +20% bodů zdarma!
Akce končí 31.10. o půlnoci.
Avatar
Peter Kristín:22. května 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. května 19:50
Avatar
Peter Kristín:22. května 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. května 20:06
Avatar
Odpovídá na Peter Kristín
Erik Šťastný:22. května 21:28

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

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

 
Nahoru Odpovědět 22. května 21:28
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:23. května 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. května 8:04
 
Nahoru Odpovědět 23. května 8:03
Avatar
Jiří Havelka:23. května 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. května 8:08
 
Nahoru Odpovědět 23. května 8:07
Avatar
Odpovídá na Peter Mlich
Peter Kristín:23. května 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. května 15:10
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24. května 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. května 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.