Una cuestión de unos y ceros
Esta relación de ejercicios, para la asignatura de Informática de 1º del Grado en Matemáticas, se basa en el problema 15 de los desafíos matemáticos de El País titulado Una cuestión de unos y ceros cuyo enunciado es el siguiente
El problema de esta semana parte de la observación de que todos los 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; 4X25=100; 5X2=10; 6X185=1110; 7×143=1001; 8X125=1000; 9×12345679=111111111… y así para cualquier número natural). La pregunta de la semana es: ¿por qué sucede esto?
La relación de ejercicios es la siguiente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
-- --------------------------------------------------------------------- -- Librerías auxiliares -- -- --------------------------------------------------------------------- import Test.QuickCheck -- --------------------------------------------------------------------- -- Ejercicio 1. Definir la constante -- numerosCon1y0 :: [Integer] -- tal que 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] -- --------------------------------------------------------------------- -- Ejercicio 2. 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] -- --------------------------------------------------------------------- multiplosCon1y0 :: Integer -> [Integer] multiplosCon1y0 n = [x | x <- numerosCon1y0, x `rem` n == 0] -- --------------------------------------------------------------------- -- Ejercicio 3. Comprobar con QuickCheck que todo número natural, -- mayor que 0, tiene múltiplos cuyos dígitos son 1 ó 0. -- --------------------------------------------------------------------- -- La propiedad es prop_existe_multiplosCon1y0 :: Integer -> Property prop_existe_multiplosCon1y0 n = n > 0 ==> multiplosCon1y0 n /= [] -- La comprobación es -- ghci> quickCheck prop_existe_multiplosCon1y0 -- +++ OK, passed 100 tests. |
La justificación matemática se puede leer en Unos, ceros… y palomas.