lunes, 26 de febrero de 2018

Programación Funcional en LINQ No. 2-18.4: Teoría de Números - Generar Factoriones

1. Problema

Generar factoriones en LINQ.

2. Solución

Un factorión es un número natural que es igual a la suma del factorial de sus dígitos. Algebraicamente, queda expresado como:
Definción algebraica de un factorión

Un ejemplo sería 145:


145 = 1 + 24 + 120 = 1! + 4! + 5!

3. Código C#


En las líneas 12-25 está definido el método de extensión Digitos(): permite descomponer un número dado en sus dígitos.


Por su parte, el método Main() (líneas 1-8) efectúa las siguientes operaciones:
  • Línea 3: Genera un rango de números enteros entre 0 y 1000.
  • Línea 4: Aplica el filtro que comprueba que la suma del factorial de los dígitos de k es igual a k:
    • Línea 5: Un nuevo filtro es aplicado para obtener sólo aquellos digítos que son mayores a 0: n > 0
      • Línea 6: Se hace la proyección que consiste en calcular el factorial de cada uno de los dígitos y luego hallar su suma:

        Select(d => Enumerable.Range(1, d).Aggregate((x, y) => x * y)).Sum()
Prueba de ejecución:
Factoriones
Figura 1. Factoriones.

4. Literatura & Enlaces

Bernard J. (2016). Python Recipes Handbook: A Problem-Solution Approach. Canada: Apress.

O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.