Múltiplos con ceros y unos
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, 1x10=10, 2x5=10, 3x37=111, 4x25=100, 5x2=10, 6x185=1110; 7x143=1001; 8X125=1000; 9x12345679=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 multiplosCon1y0 :: Integer -> [Integer] multiplosCon1y0 n = [x | x <- numerosCon1y0, x `rem` n == 0] -- numerosCon1y0 es la lista de los números cuyos dígitos son 1 ó 0. Por -- ejemplo, -- λ> 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] -- La propiedad es prop_existe_multiplosCon1y0 :: Integer -> Property prop_existe_multiplosCon1y0 n = n > 0 ==> multiplosCon1y0 n /= [] -- La comprobación es -- λ> quickCheck prop_existe_multiplosCon1y0 -- +++ OK, passed 100 tests.