Se observa que todos los primeros números naturales tienen al menos un múltiplo no nulo que está formado solamente por ceros y unos. Por ejemplo, 1×10=10, 2×5=10, 3×37=111, 4×25=100, 5×2=10, 6×185=1110; 7×143=1001; 8X125=1000; 9×12345679=111111111.
Definir la función
multiplosCon1y0 :: Integer -> [Integer] |
tal que (multiplosCon1y0 n) es la lista de los múltiplos de n cuyos dígitos son 1 ó 0. Por ejemplo,
take 4 (multiplosCon1y0 3) == [111,1011,1101,1110] take 3 (multiplosCon1y0 23) == [110101,1011011,1101010] head (multiplosCon1y0 1234658) == 110101101101000000110 |
Comprobar con QuickCheck que todo entero positivo tiene algún múltiplo cuyos dígitos son 1 ó 0.
Soluciones
import Test.QuickCheck -- 1ª definición -- ============= multiplosCon1y0 :: Integer -> [Integer] multiplosCon1y0 n = [x | x <- multiplos n , todos1y0 x] -- (multiplos n) es la lista de los múltiplos de n. Por ejemplo, -- take 12 (multiplos 5) == [5,10,15,20,25,30,35,40,45,50,55,60] multiplos :: Integer -> [Integer] multiplos n = [n,2*n..] -- (todos1y0 n) se verifica si todos los dígitos de n son el 1 o el -- 0. Por ejmplo, -- todos1y0 1101110 == True -- todos1y0 1102110 == False todos1y0 :: Integer -> Bool todos1y0 n = all (`elem` "01") (show n) -- 2ª definición -- ============= multiplosCon1y0b :: Integer -> [Integer] multiplosCon1y0b n = [x | x <- numerosCon1y0 , x `rem` n == 0] -- numerosCon1y0 es la lista de los números cuyos dígitos son 1 ó 0. Por -- ejemplo, -- ghci> take 15 numerosCon1y0 -- [1,10,11,100,101,110,111,1000,1001,1010,1011,1100,1101,1110,1111] numerosCon1y0 :: [Integer] numerosCon1y0 = 1 : concat [[10*x,10*x+1] | x <- numerosCon1y0] -- Comparación de eficiencia -- ========================= -- λ> head (multiplosCon1y0 9) -- 111111111 -- (7.70 secs, 10,853,320,456 bytes) -- λ> head (multiplosCon1y0b 9) -- 111111111 -- (0.01 secs, 167,992 bytes) -- Comprobación de la propiedad -- ============================ -- La propiedad es prop_existe_multiplosCon1y0 :: Integer -> Property prop_existe_multiplosCon1y0 n = n > 0 ==> (not . null) (multiplosCon1y0b n) -- La comprobación es -- λ> quickCheck prop_existe_multiplosCon1y0 -- +++ OK, passed 100 tests. |
Pensamiento
Huye del triste amor, amor pacato,
sin peligro, sin venda ni aventura,
que espera del amor prenda segura,
porque en amor locura es lo sensato.Antonio Machado