longPeriodosFibMod es la sucesión de las longitudes de los períodos de las sucesiones de Fibonacci módulo n, para n > 0. Por ejemplo,
λ> take 20 longPeriodosFibMod
[1,3,8,6,20,24,16,12,24,60,10,24,28,48,40,24,36,24,18,60]
λ> take 20 longPeriodosFibMod
[1,3,8,6,20,24,16,12,24,60,10,24,28,48,40,24,36,24,18,60]
(graficaLongPeriodosFibMod n) dibuja la gráfica de los n primeros términos de la sucesión longPeriodosFibMod. Por ejemplo, (graficaLongPeriodosFibMod n) dibuja
Soluciones
import Graphics.Gnuplot.Simple
fibsMod ::Integer->[Integer]
fibsMod n =map(`mod` n) fibs
-- fibs es la sucesión de Fibonacci. Por ejemplo,-- λ> take 20 fibs-- [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181]
fibs ::[Integer]
fibs =0:1:zipWith(+) fibs (tail fibs)
periodoFibMod ::Integer->[Integer]
periodoFibMod 1=[0]
periodoFibMod n =0:1: aux (drop2(fibsMod n))where aux (0:1:xs)=[]
aux (a:b:xs)= a : aux (b:xs)
longPeriodosFibMod ::[Int]
longPeriodosFibMod =[length(periodoFibMod n)| n <-[1..]]-- 2ª definición de longPeriodosFibMod-- ===================================
longPeriodosFibMod2 ::[Int]
longPeriodosFibMod2 =map longPeriodoFibMod [1..]
longPeriodoFibMod ::Integer->Int
longPeriodoFibMod 1=1
longPeriodoFibMod n = aux 1(tail(fibsMod n))0where aux 0(1: xs) k = k
aux _ (x : xs) k = aux x xs (k +1)
graficaLongPeriodosFibMod ::Int->IO()
graficaLongPeriodosFibMod n =
plotList [ Key Nothing
, Title ("graficaLongPeriodosFibMod "++show n)
, PNG ("Periodos_de_Fibonacci "++show n ++".png")](take n longPeriodosFibMod)
import Graphics.Gnuplot.Simple
fibsMod :: Integer -> [Integer]
fibsMod n = map (`mod` n) fibs
-- fibs es la sucesión de Fibonacci. Por ejemplo,
-- λ> take 20 fibs
-- [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181]
fibs :: [Integer]
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
periodoFibMod :: Integer -> [Integer]
periodoFibMod 1 = [0]
periodoFibMod n = 0 : 1 : aux (drop 2 (fibsMod n))
where aux (0:1:xs) = []
aux (a:b:xs) = a : aux (b:xs)
longPeriodosFibMod :: [Int]
longPeriodosFibMod =
[length (periodoFibMod n) | n <- [1..]]
-- 2ª definición de longPeriodosFibMod
-- ===================================
longPeriodosFibMod2 :: [Int]
longPeriodosFibMod2 = map longPeriodoFibMod [1..]
longPeriodoFibMod :: Integer -> Int
longPeriodoFibMod 1 = 1
longPeriodoFibMod n = aux 1 (tail (fibsMod n)) 0
where aux 0 (1 : xs) k = k
aux _ (x : xs) k = aux x xs (k + 1)
graficaLongPeriodosFibMod :: Int -> IO ()
graficaLongPeriodosFibMod n =
plotList [ Key Nothing
, Title ("graficaLongPeriodosFibMod " ++ show n)
, PNG ("Periodos_de_Fibonacci " ++ show n ++ ".png")]
(take n longPeriodosFibMod)
fib ::[Integer]
fib =0:1:zipWith(+) fib (tail fib)
fibsMod ::Integer->[Integer]
fibsMod n =map(`mod` n) fib
periodoFibMod ::Integer->[Integer]
periodoFibMod 1=[0]
periodoFibMod n =0: aux (tail(fibsMod n))where aux (0:1:_)=[]
aux (x:xs)= x : aux xs
longPeriodosFibMod ::[Int]
longPeriodosFibMod =maplength[periodoFibMod n | n <-[1..]]
fib :: [Integer]
fib = 0 : 1 : zipWith (+) fib (tail fib)
fibsMod :: Integer -> [Integer]
fibsMod n = map (`mod` n) fib
periodoFibMod :: Integer -> [Integer]
periodoFibMod 1 = [0]
periodoFibMod n = 0 : aux (tail (fibsMod n))
where aux (0:1:_) = []
aux (x:xs) = x : aux xs
longPeriodosFibMod :: [Int]
longPeriodosFibMod = map length [periodoFibMod n | n <- [1..]]
import Data.Array
fibsMod ::Integer->[Integer]
fibsMod 1=repeat0
fibsMod n =cycle(periodoFibMod n)
periodoFibMod ::Integer->[Integer]
periodoFibMod 1=[0]
periodoFibMod n =0:aux (tail u)where aux (0:1:_)=[]
aux (x:xs)= x:aux xs
v = listArray (1,n^2+1) u
u =0:1:[(v!(i-1)+v!(i-2)) `mod` n | i<-[3..n^2+1]]
import Data.Array
fibsMod :: Integer -> [Integer]
fibsMod 1 = repeat 0
fibsMod n = cycle(periodoFibMod n)
periodoFibMod :: Integer -> [Integer]
periodoFibMod 1 = [0]
periodoFibMod n = 0:aux (tail u)
where aux (0:1:_) = []
aux (x:xs) = x:aux xs
v = listArray (1,n^2+1) u
u = 0:1:[(v!(i-1)+v!(i-2)) `mod` n | i<-[3..n^2+1]]
Para que la definición de jaibengue no tenga el mismo problema que la de angruicam1 habría que demostrar que para todo n, la longitud del período no es mayor que n^2+1.
En la definición de angruicam1, al limitar la longitud del vector a 2000 da respuestas erróneas para los números con períodos de más de 2000 elementos. Por ejemplo,
Otra definición inspirada en tu idea:
Para que la definición de jaibengue no tenga el mismo problema que la de angruicam1 habría que demostrar que para todo n, la longitud del período no es mayor que n^2+1.
En la definición de angruicam1, al limitar la longitud del vector a 2000 da respuestas erróneas para los números con períodos de más de 2000 elementos. Por ejemplo,
pero debería de dar 2700.
Un intento de definición sin argumentos: