Menu Close

Día: 20 mayo, 2021

Sumas y productos de dígitos

El enunciado de un problema 3 de la Fase Local de la Olimpiada Matemática Española del
2000
es

¿Cuántos números, comprendidos entre 1.000 y 9.999, verifican que la suma de sus cuatro dígitos es mayor o igual que el producto de los mismos? ¿Para cuántos de ellos se verifica la igualdad?

Definir las funciones

   conMayorSumaQueProducto :: Int -> Int -> [Int]
   conIgualSumaQueProducto :: Int -> Int -> [Int]

tales que

  • (conMayorSumaQueProducto a b) es la lista de los números del intervalo [a,b] tales que la suma de sus dígitos es mayor que el producto de los mismos. Por ejemplo,
     λ> conMayorSumaQueProducto 20 99
     [20,21,30,31,40,41,50,51,60,61,70,71,80,81,90,91]
     λ> conMayorSumaQueProducto 120 199
     [120,121,122,130,131,140,141,150,151,160,161,170,171,180,181,190,191]
     λ> conMayorSumaQueProducto 220 299
     [220,221,230,240,250,260,270,280,290]
  • (conIgualSumaQueProducto a b) es la lista de los números del intervalo [a,b] tales que la suma de sus dígitos es igual que el producto de los mismos. Por ejemplo,
     λ> conIgualSumaQueProducto 10 99
     [22]
     λ> conIgualSumaQueProducto 100 999
     [123,132,213,231,312,321]

Usando las funciones anteriores, calcular las respuestas a las preguntas del problema de la Olimpiada.

Soluciones

[schedule on=’2021-05-27′ at=”06:00″]
conMayorSumaQueProducto :: Int -> Int -> [Int]
conMayorSumaQueProducto a b =
  [x | x <- [a..b],
       let xs = digitos x,
       sum xs > product xs]
 
conIgualSumaQueProducto :: Int -> Int -> [Int]
conIgualSumaQueProducto a b =
  [x | x <- [a..b],
       let xs = digitos x,
       sum xs == product xs]
 
-- (digitos n) es la lista de los dígitos de n. Por ejemplo,
--    digitos 325 == [3,2,5]
digitos :: Int -> [Int]
digitos a = [read [c] | c <-show a]
 
-- Cálculo de las respuestas
-- =========================
 
-- La cantidad de números, comprendidos entre 1.000 y 9.999, tales
-- que la suma de sus cuatro dígitos es mayor o igual que el producto de
-- los mismos se calcula con
--    λ> length (conMayorSumaQueProducto 1000 9999 ++ conIgualSumaQueProducto 1000 9999)
--    2502
-- Por tanto, hay 2502 números que cumplen la primera condición.
 
-- La cantidad de números, comprendidos entre 1.000 y 9.999, tales
-- que la suma de sus cuatro dígitos es igual que el producto de los
-- mismos se calcula con
--    λ> length (conIgualSumaQueProducto 1000 9999)
--    12
-- Por tanto, hay 12 números que cumplen la segunda condición. La lista
-- de dichos números se puede calcular con
--    λ> conIgualSumaQueProducto 1000 9999
--    [1124,1142,1214,1241,1412,1421,2114,2141,2411,4112,4121,4211]

Nuevas soluciones

  • En los comentarios se pueden escribir nuevas soluciones.
  • El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>