Máximo común divisor de x e y veces n
Definir las funciones
repite :: Int -> Integer -> Integer mcdR :: Integer -> Int -> Int -> Integer
tales que
- (repite x n) es el número obtenido repitiendo x veces el número n. Por ejemplo.
repite 3 123 == 123123123
- (mcdR n x y) es el máximo común divisor de los números obtenidos repitiendo x veces e y veces el número n. Por ejemplo.
mcdR 123 2 3 == 123 mcdR 4 4 6 == 44 mcdR 2017 (10^1000) (2+10^1000) == 20172017
Soluciones
import Test.QuickCheck repite :: Int -> Integer -> Integer repite x n = read (concat (replicate x (show n))) -- 1ª definición mcdR :: Integer -> Int -> Int -> Integer mcdR n x y = gcd (repite x n) (repite y n) -- 2ª definición mcdR2 :: Integer -> Int -> Int -> Integer mcdR2 n x y = repite (gcd x y) n -- Comprobación de equivalencia -- ============================ -- La propiedad es prop_equivalencia :: (Positive Integer) -> (Positive Int) -> (Positive Int) -> Bool prop_equivalencia (Positive n) (Positive x) (Positive y) = mcdR n x y == mcdR2 n x y -- La comprobación es -- λ> quickCheck prop_equivalencia -- +++ OK, passed 100 tests. -- Comparación de eficiencia -- ========================= -- λ> mcdR 2017 (10^6) (2+10^6) -- 20172017 -- (18.92 secs, 6,012,285,224 bytes) -- λ> mcdR2 2017 (10^6) (2+10^6) -- 20172017 -- (0.01 secs, 0 bytes)