A-M baby
This commit is contained in:
parent
764da6cbbb
commit
db842d013d
19005 changed files with 197040 additions and 7 deletions
1
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-1.hs
Normal file
1
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-1.hs
Normal file
|
|
@ -0,0 +1 @@
|
|||
fib = 0 : 1 : zipWith (+) fib (tail fib)
|
||||
1
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-2.hs
Normal file
1
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-2.hs
Normal file
|
|
@ -0,0 +1 @@
|
|||
fib = 0 : 1 : next fib where next (a: t@(b:_)) = (a+b) : next t
|
||||
1
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-3.hs
Normal file
1
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-3.hs
Normal file
|
|
@ -0,0 +1 @@
|
|||
fib = 0 : scanl (+) 1 fib
|
||||
15
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-4.hs
Normal file
15
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-4.hs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import Data.List
|
||||
|
||||
xs <+> ys = zipWith (+) xs ys
|
||||
xs <*> ys = sum $ zipWith (*) xs ys
|
||||
|
||||
newtype Mat a = Mat {unMat :: [[a]]} deriving Eq
|
||||
|
||||
instance Show a => Show (Mat a) where
|
||||
show xm = "Mat " ++ show (unMat xm)
|
||||
|
||||
instance Num a => Num (Mat a) where
|
||||
negate xm = Mat $ map (map negate) $ unMat xm
|
||||
xm + ym = Mat $ zipWith (<+>) (unMat xm) (unMat ym)
|
||||
xm * ym = Mat [[xs <*> ys | ys <- transpose $ unMat ym] | xs <- unMat xm]
|
||||
fromInteger n = Mat [[fromInteger n]]
|
||||
3
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-5.hs
Normal file
3
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-5.hs
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
fib 0 = 0 -- this line is necessary because "something ^ 0" returns "fromInteger 1", which unfortunately
|
||||
-- in our case is not our multiplicative identity (the identity matrix) but just a 1x1 matrix of 1
|
||||
fib n = last $ head $ unMat $ (Mat [[1,1],[1,0]]) ^ n
|
||||
20
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-6.hs
Normal file
20
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-6.hs
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
fibsteps (a,b) n
|
||||
| n <= 0 = (a,b)
|
||||
| True = fibsteps (b, a+b) (n-1)
|
||||
|
||||
fibnums :: [Integer]
|
||||
fibnums = map fst $ iterate (`fibsteps` 1) (0,1)
|
||||
|
||||
fibN2 :: Integer -> (Integer, Integer)
|
||||
fibN2 m | m < 10 = fibsteps (0,1) m
|
||||
fibN2 m = fibN2_next (n,r) (fibN2 n)
|
||||
where (n,r) = quotRem m 3
|
||||
|
||||
fibN2_next (n,r) (f,g) | r==0 = (a,b) -- 3n ,3n+1
|
||||
| r==1 = (b,c) -- 3n+1,3n+2
|
||||
| r==2 = (c,d) -- 3n+2,3n+3 (*)
|
||||
where
|
||||
a = ( 5*f^3 + if even n then 3*f else (- 3*f) ) -- 3n
|
||||
d = ( 5*g^3 + if even n then (- 3*g) else 3*g ) -- 3(n+1) (*)
|
||||
b = ( g^3 + 3 * g * f^2 - f^3 ) -- 3n+1
|
||||
c = ( g^3 + 3 * g^2 * f + f^3 ) -- 3n+2
|
||||
2
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-7.hs
Normal file
2
Task/Fibonacci-sequence/Haskell/fibonacci-sequence-7.hs
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
*Main> take 10 $ show $ fst $ fibN2 (10^6)
|
||||
"1953282128"
|
||||
Loading…
Add table
Add a link
Reference in a new issue