Ir al contenido principal

Conjunto de primos relativos

Dos números enteros son primos relativos si no tienen ningún factor primo en común, o, dicho de otra manera, si no tienen otro divisor común más que 1 y -1. Equivalentemente son primos entre sí, si y sólo si, su máximo común divisor es igual a 1.

Por ejemplo, 6 y 35 son primos entre sí, pero 6 y 27 no lo son porque ambos son divisibles por 3

Definir la función

primosRelativos :: [Int] -> Bool

tal que (primosRelativos xs) se verifica si los elementos de xs son primos relativos dos a dos. Por ejemplo,

primosRelativos [6,35]         ==  True
primosRelativos [6,27]         ==  False
primosRelativos [2,3,4]        ==  False
primosRelativos [6,35,11]      ==  True
primosRelativos [6,35,11,221]  ==  True
primosRelativos [6,35,11,231]  ==  False

Soluciones

import Data.List (delete)

-- 1ª solución (por recursión):
primosRelativos :: [Int] -> Bool
primosRelativos []     = True
primosRelativos (x:xs) =
  and [gcd x y == 1 | y <- xs] && primosRelativos xs

-- 2ª solución (por comprensión):
primosRelativos2 :: [Int] -> Bool
primosRelativos2 xs = and [gcd x y == 1 | x <- xs, y <- delete x xs]