me gustaría construir un pitón eficiente iterador/generador que produce:eficientemente generar todos los números compuestos inferior a N (con sus factorizaciones)
- Todos los números compuestos inferior a N
- Junto con su mejor momento factorización
lo llamaré "composites_with_factors()"
Asumir que ya tenemos un li st de primos menor que N, o un generador de primos que puede hacer lo mismo.
Nota que:
- no necesita los números que se produjo en orden numérico
- no me importa si es 1 se produjo al comienzo o no
- no les importa si sean cedidos números primos también
calculo esto se puede hacer con un generador recursiva inteligente ...
Por lo tanto, por ejemplo, una llamada a composites_with_factors (16) puede producir:
# 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)
Como se puede ver en el orden de mi salida, concibo de este trabajo, comenzando con el primo más pequeño en el generador de números primos disponibles, y la salida de todos los poderes de ese primo menor que N, luego intente de nuevo a través de los poderes de ese primo pero en cada etapa viendo si puedo aplicar poderes de primos adicionales (y aún ser menor que N). Cuando se hayan realizado todas las combinaciones con ESTE primo, suéltelo y repítalo con el siguiente número primo más bajo disponible en el generador de primos.
Mis intentos de hacer esto con "generadores recursivos" me han confundido mucho sobre cuándo salir de la recursión con "rendimiento", o "levantar StopIteration", o "devolver", o simplemente caer de las recursivas función.
¡Gracias por su sabiduría!
NOTA ADICIONAL:
que hacer tienen una manera de hacer esto ahora: He escrito una función para factorizar números, por lo que puede factorizar hacia abajo a números primos, y dar los resultados. No hay problema. Lo mantengo increíblemente rápido confiando en un caché de "cuál es el factor primo más bajo del número N" ... para N hasta 10 millones.
Sin embargo, una vez que estoy fuera del caché, pasaremos al factoring "ingenuo". (. Yuck)
El punto de este post es:
- Estoy asumiendo que "la generación de grandes materiales compuestos a partir de sus factores" será más rápido que "factorización de grandes materiales compuestos" ... sobre todo porque yo DON 'T se preocupan por el orden, y
- ¿Cómo se puede tener un generador de Python "recursivamente" a sí mismo, y producir una sola secuencia de cosas generadas?
¿Qué esfuerzos se han realizado hacia este método? Muéstranos tu código, por favor. – Makoto
¿Has hecho el generador de primos, o simplemente un generador de números impares para empezar? Quizás sea más fácil de entender si haces una pieza a la vez. Por favor, muéstranos el código que tienes hasta ahora. – gbulmer
@Makoto: Mis intentos han fallado por completo, y NO se iluminarán si publico los restos. Por ejemplo, mi caso solo arrojó una fracción de todos los enteros menores que N. –