domingo, 25 de febrero de 2018

Programación Funcional en LINQ No. 2-18.3: Teoría de Números - Obtener Números Suma-Producto

1. Problema

Generar números suma-producto utilizando LINQ.

2. Solución

Un número suma-producto es un entero que se obtiene a partir del producto entre la sumatoria y la productoria de los dígitos. Esta definición se puede expresar así:
Definición algebraica de un número suma-producto

La variable l indica la cantidad de dígitos en el número; y las variables d con índice i o j indican el enésimo dígito del número n.

3. Código C#


En las líneas 14-26 se define el método de extensión Digitos(); este método se usa para obtener cada uno de los dígitos de un número como una secuencia.


Entre las líneas 1-9 está definido el método Main(); aquí ocurren las siguientes operaciones:
  • Línea 3: Se genera una secuencia con valores enteros entre 0 y 1000.
  • Línea 4: Se aplica la aplicación filtro Where.
    • Línea 5: Para el k número de la secuencia se obtienen sus dígitos.
    • Línea 7: Se comprueba el predicado que define un número suma-producto; es decir:

      digitos.Sum() * digitos.Aggregate((x, y) => x * y) == k

      Si el producto entre la sumatoria y la productoria de los l dígitos del k número es igual k, entonces k es un número suma-producto.
Prueba de ejecución:
Números suma-producto entre 0 y 1000.
Figura 1. Números suma-producto entre 0 y 1000.

4. Literatura & Enlaces

Mukherjee, S (2014). Thinking in LINQ Harnessing the Power of Functional Programming in .NET Applications. United States: Apress.

O

No hay comentarios:

Publicar un comentario

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