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)