Mayor resto
El resultado de dividir un número n por un divisor d es un cociente q y un resto r.
Definir la función
1 |
mayorResto :: Int -> Int -> (Int,[Int]) |
tal que (mayorResto n d) es el par (m,xs) tal que m es el mayor resto de dividir n entre x (con 1 ≤ x < d) y xs es la lista de números x menores que d tales que el resto de n entre x es m. Por ejemplo,
1 2 |
mayorResto 20 10 == (6,[7]) mayorResto 50 8 == (2,[3,4,6]) |
Nota: Se supone que d es mayor que 1.
Soluciones
1 2 3 |
mayorResto :: Int -> Int -> (Int,[Int]) mayorResto n d = (m, [x | x <- [1..d-1], n `rem` x == m]) where m = maximum [n `rem` x | x <- [1..d-1]] |
Referencia
El ejercio está basado en el problema Largest possible remainder publicado el 16 de octubre de 2015 en «Programming paraxis».
Para el caso especial de
d == 1
esta solución es incorrecta.La solución corregida:
Mucho más eficiente al cambiar las variables por constantes cuyas variables coinciden con las de (mayoResto n d), en vez de usar funciones con variables propias.