Parte libre de cuadrados y parte cuadrada de un número
La parte libre de cuadrados de un número n es el producto de todos sus divisores primos con exponente impar en la factorización prima de n. Por ejemplo, la parte libre de cuadrados de 360 es 10 ya que 360 = 2³3²5 y 2.5 = 10; además, 360 = 10.6²
La parte cuadrada de un número n es el mayor número cuadrado que divide a n. Por ejemplo, la parte cuadrada de 360 es 6.
Definir las funciones
1 2 |
parteLibre :: Integer -> Integer parteCuadrada :: Integer -> Integer |
tales que
- (parteLibre x) es la parte libre de x. Por ejemplo,
1 2 3 |
parteLibre 360 == 10 parteLibre 1800 == 2 [parteLibre n | n <- [1..14]] == [1,2,3,1,5,6,7,2,1,10,11,3,13,14] |
- (parteCuadrada x) es la parte cuadrada de x. Por ejemplo,
1 2 3 |
parteCuadrada 360 == 36 parteCuadrada 1800 == 900 [parteCuadrada n | n <- [1..14]] == [1,1,1,4,1,1,1,4,9,1,1,4,1,1] |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import Data.List (group, genericLength) import Data.Numbers.Primes (primeFactors) parteLibre :: Integer -> Integer parteLibre n = product [p | (p,e) <- factorizacion n, odd e] -- (factorizacion n) es la factorización de n. Por ejemplo, -- factorizacion 600 == [(2,3),(3,1),(5,2)] -- factorizacion 1400 == [(2,3),(5,2),(7,1)] factorizacion :: Integer -> [(Integer,Integer)] factorizacion n = [(head xs,genericLength xs) | xs <- group (primeFactors n)] parteCuadrada :: Integer -> Integer parteCuadrada n = n `div` parteLibre n |
Referencias
- N.J.A. Sloane, Sequence A008833 en OEIS.
- N.J.A. Sloane, Sequence A007913 en OEIS.
- E.W. Weisstein, Square part en MathWorld.
- E.W. Weisstein, Squarefree part en MathWorld.
3 Comentarios