[Python] numeri primi
Daniele Zambelli
daniele.zambelli a gmail.com
Mer 3 Ago 2011 08:12:48 CEST
Il giorno 02 agosto 2011 17:49, matteo <matteo.web73 a gmail.com> ha scritto:
> import math
> def primi(N):
>
> """ Print first N prime numbers """
>
> primes=[2]
> x=3
> while x<N:
> valid=True
> for divi in primes[:int(math.sqrt(x))]:
> if x%divi==0:
> valid=False
> break
> if valid:
> primes.append(x)
> x=x+2
> return primes
>
> ecco ;) è sempliciotto, ma gia ho pensato a qualcosa per migliorarlo, voi
> che ne pensate?
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>
Qualche idea:
- non occorre mettere il 2 fin da subito nella lista dei primi dato che poi,
incrementando di 2 ottieni sempre numeri dispari.
- l'istruzione: primes[:int(math.sqrt(x))] costruisce, ogni volta che viene
chiamata, una nuova lista. Dovresti riuscire a far fare il ciclo in questo
modo: for divi in primes: ...
- sostituire l'operazione % con la funzione divmod può permetterti di
evitare la radice quadrata.
- non dovrebbe neppure essere un grosso problema evitare l'uso della
variabile isvalid.
Io proverei i tempi con questi cambiamenti, per avere ulteriori
miglioramenti bisogna, penso, impostare l'algoritmo in modo diverso
utilizzando le istruzioni di Python di trattamento delle liste.
Prova e facci sapere dei miglioramenti nei tempi
--
Daniele
www.fugamatematica.blogspot.com
giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20110803/e48e401e/attachment-0001.html>
Maggiori informazioni sulla lista
Python