Pares definidos por su MCD y su MCM

Definir las siguientes funciones

tales que

  • (pares a b) es la lista de los pares de números enteros positivos tales que su máximo común divisor es a y su mínimo común múltiplo es b. Por ejemplo,

  • (nPares a b) es el número de pares de enteros positivos tales que su máximo común divisor es a y su mínimo común múltiplo es b. Por ejemplo,

Soluciones

5 Comentarios

  1. Una primera idea para ir dándole vueltas:

    Ahora a mejorarla ^^

    1. Buenas, se me ocurre que para mejorar tu función puedes emplear la función subsequences (definida en la librería Data.List) en lugar de definir la función conjuntoPot. De esa forma mejoras la eficiencia de la función.

      Comparación de la eficiencia:

      λ> length (pares 3 (product [3,5..91]))
      8388608
      (6.50 secs, 3,154,333,856 bytes)
      λ> length (pares2 3 (product [3,5..91]))
      8388608
      (4.64 secs, 2,818,784,776 bytes)

      *La función pares es la tuya y la función pares2 es igual pero sustituyendo lo comentado.

      Por lo demás no se me ocurre nada más por el momento para mejorarla.

      1. Gracias por tu comentario!

        Por cierto, me he dado cuenta de, en la línea 15:
        conjuntoPot (x:xs) = u ++ map (x:) u
        en lugar de
        conjuntoPot (x:xs) = map (x:) u ++ u
        que es, lo segundo, ligeramente más eficiente.

Escribe tu solución