mi piacerebbe costruire un efficiente Python iteratore/generatore che produce:efficiente generare tutti i numeri composti meno di N (con i loro fattorizzazione)
- Tutti i numeri composti meno di N
- Insieme con il loro primo fattorizzazione
io chiamo "composites_with_factors()"
Assumere abbiamo già una batteria Li st di numeri primi meno di N, o un generatore di primi che può fare lo stesso.
Nota che:
- non hanno bisogno i numeri per essere ceduto in ordine numerico
- Non mi importa se 1 viene ceduto all'inizio o no
- non mi importa se stanno ceduto numeri primi anche
Immagino che questo può essere fatto con un generatore di ricorsiva intelligente ...
Quindi, per esempio, una chiamata a composites_with_factors (16) può produrre:
# yields values in form of "composite_value, (factor_tuple)"
2, (2)
4, (2, 2)
8, (2, 2, 2)
6, (2, 3)
12, (2, 2, 3)
10, (2, 5)
14, (2, 7)
3, (3)
9, (3, 3)
15, (3, 5)
5, (5)
7, (7)
11, (11)
13, (13)
Come si può vedere dalla fine della mia produzione, concepisco di questo lavoro avviando con il più piccolo privilegiata sul generatore di numeri primi disponibili, e l'output tutti i poteri di quel primo inferiore a N, quindi riprovare attraverso i poteri di quel primo, ma ad ogni stadio vedendo se posso applicare poteri di numeri primi aggiuntivi (e comunque essere inferiore a N). Quando tutte le combinazioni con THAT prime sono terminate, rilasciatelo e ripetete con il numero primo più basso disponibile sul generatore di primi.
I miei tentativi di fare questo con "generatori ricorsivi" mi hanno fatto molto confondere su quando uscire dalla ricorsione con "rendimento", o "aumentare StopIteration", o "tornare", o semplicemente cadere fuori dal rottame funzione.
Grazie per la tua saggezza!
Nota aggiuntiva:
ho fare hanno un modo per farlo ora: ho scritto una funzione di fattore numeri, quindi posso fattore giù per primi, e dare i risultati. Nessun problema. Lo tengo incredibilmente veloce basandomi su una cache di "qual è il fattore primo più basso del numero N" ... per N fino a 10 milioni.
Tuttavia, una volta uscito dal cache, lo faremo per il factoring "ingenuo". (. Yuck)
Il punto di questo post è:
- Sto assumendo che "la generazione di grandi dimensioni composti dai loro fattori" sarà più veloce di "factoring grandi compositi" ... soprattutto perché ho DON 'T cura dell'ordine, e
- Come si può avere un generatore Python "ricorsivamente" chiamandosi e producendo un singolo flusso di cose generate?
Quali sforzi avete fatto nei confronti di questo metodo? Mostraci il tuo codice, per favore. – Makoto
Hai creato il generatore di primi o solo un generatore di numeri dispari con cui iniziare? Forse sarà più facile capire se fai un pezzo alla volta. Per favore mostraci il codice che hai finora. – gbulmer
@Makoto: I miei tentativi sono completamente falliti e NON si illuminano se pubblico i relitti. Ad esempio, il mio caso ha prodotto solo una frazione di tutti gli interi inferiori a N. –