Números oblongos
Un número oblongo es un número que es el producto de dos números naturales consecutivos; es decir, n es un número oblongo si existe un número natural x tal que n = x(x+1). Por ejemplo, 42 es un número oblongo porque 42 = 6 x 7.
Definir las funciones
1 2 |
esOblongo :: Integer -> Bool oblongos :: [Integer] |
tales que
- (esOblongo n) se verifica si n es oblongo. Por ejemplo,
1 2 3 |
esOblongo 42 == True esOblongo 40 == False esOblongo 100000010000000 == True |
- oblongos es la suceción de los números oblongos. Por ejemplo,
1 2 3 |
take 15 oblongos == [0,2,6,12,20,30,42,56,72,90,110,132,156,182,210] oblongos !! 50 == 2550 oblongos !! (10^7) == 100000010000000 |
Soluciones
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 |
-- 1ª definición de esOblongo esOblongo1 :: Integer -> Bool esOblongo1 n = n == x * (x+1) where x = round (sqrt (fromIntegral n)) -- 2ª definición de esOblongo esOblongo2 :: Integer -> Bool esOblongo2 n = n `pertenece` oblongos3 pertenece :: Integer -> [Integer] -> Bool pertenece x ys = x == head (dropWhile (< x) ys) -- 1ª definición de oblongos oblongos1 :: [Integer] oblongos1 = [n | n <- [0..] , esOblongo1 n] -- 2ª definición de oblongos oblongos2 :: [Integer] oblongos2 = filter esOblongo1 [0..] -- 3ª definición de oblongos oblongos3 :: [Integer] oblongos3 = zipWith (*) [0..] [1..] |