summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Wisniowski <matthias.wisniowski@gmail.com>2012-04-05 08:57:40 +0200
committerMatthias Wisniowski <matthias.wisniowski@gmail.com>2012-04-05 08:57:40 +0200
commitb773165e36a503064d39ae59a025aa33a0392339 (patch)
treecccd7f67fb4493044ea24355ef48de985989407b
parent9ec6c36704339854b5f117f598bfe88e2aef5afb (diff)
parent4ae6d25fafe70ae372c6b5682b43cf10f2192ef9 (diff)
downloadffp-b773165e36a503064d39ae59a025aa33a0392339.tar.gz
ffp-b773165e36a503064d39ae59a025aa33a0392339.tar.bz2
ffp-b773165e36a503064d39ae59a025aa33a0392339.zip
Merge branch 'dev'
-rw-r--r--AufgabeFFP2.hs22
1 files changed, 12 insertions, 10 deletions
diff --git a/AufgabeFFP2.hs b/AufgabeFFP2.hs
index 44b2efb..0415b32 100644
--- a/AufgabeFFP2.hs
+++ b/AufgabeFFP2.hs
@@ -19,10 +19,11 @@ isPrime n = n > 1 &&
19primes :: [Integer] 19primes :: [Integer]
20primes = 2:filter isPrime [3,5..] 20primes = 2:filter isPrime [3,5..]
21 21
22-- pairs of (p,p+2) | p,p+2 <- primes
22-- generate all pairs with map and then filter only the valid ones 23-- generate all pairs with map and then filter only the valid ones
23-- pair is valid if the second component n is a prime 24-- pair is valid if the second component n is a prime
24pps :: [(Integer, Integer)] 25pps :: [(Integer, Integer)]
25pps = filter (\(_,y) -> isPrime y) $ map (\x -> (x,x+2)) primes 26pps = filter (\(_,x) -> isPrime x) $ map (\p -> (p,p+2)) primes
26 27
27------------------------------------------------------------------------------- 28-------------------------------------------------------------------------------
28 29
@@ -32,11 +33,12 @@ pps = filter (\(_,y) -> isPrime y) $ map (\x -> (x,x+2)) primes
32pof2s :: [Integer] 33pof2s :: [Integer]
33pof2s = [1] ++ map (2*) pof2s 34pof2s = [1] ++ map (2*) pof2s
34 35
36-- calculates 2^n
35pow :: Int -> Integer 37pow :: Int -> Integer
36pow 0 = 1 38pow 0 = 1
37pow n = pow (n-1) + pow (n-1) 39pow n = pow (n-1) + pow (n-1)
38 40
39-- uses memtable for power-calculation 41-- same as pow but uses memtable for power-calculation
40powFast :: Int -> Integer 42powFast :: Int -> Integer
41powFast 0 = 1 43powFast 0 = 1
42powFast n = pof2s !! (n-1) + pof2s !! (n-1) 44powFast n = pof2s !! (n-1) + pof2s !! (n-1)
@@ -49,14 +51,14 @@ powFast n = pof2s !! (n-1) + pof2s !! (n-1)
49pofNs :: Integer -> [Integer] 51pofNs :: Integer -> [Integer]
50pofNs n = [1] ++ (map (n*) $ pofNs n) 52pofNs n = [1] ++ (map (n*) $ pofNs n)
51 53
52-- faculty function 54-- stream of factorials
55facs :: [Integer]
56facs = scanl (*) 1 [1..]
57
58-- factorial function
53fac :: Integer -> Integer 59fac :: Integer -> Integer
54fac n = product [1..n] 60fac n = product [1..n]
55 61
56-- stream of faculties
57facGen :: [Integer]
58facGen = map (fac) [1..]
59
60-- function g with memoization (using hFast) 62-- function g with memoization (using hFast)
61fMT :: Int -> Int -> Float 63fMT :: Int -> Int -> Float
62fMT z k = g z k hMT 64fMT z k = g z k hMT
@@ -69,9 +71,9 @@ f z k = g z k h
69g :: Int -> Int -> (Integer -> Integer -> Float) -> Float 71g :: Int -> Int -> (Integer -> Integer -> Float) -> Float
70g z k h = sum $ map (h $ fromIntegral z) [1..(fromIntegral k)] 72g z k h = sum $ map (h $ fromIntegral z) [1..(fromIntegral k)]
71 73
72-- helper function h using mem-table for the power-series (z^i) and for faculty (i!) 74-- helper function h using mem-table for the power-series (z^i) and for factorial (i!)
73hMT :: Integer -> Integer -> Float 75hMT :: Integer -> Integer -> Float
74hMT z i = (fromInteger $ pofNs z !! (fromInteger i)) / (fromInteger $ facGen !! ((fromIntegral i)-1)) 76hMT z i = (fromInteger $ pofNs z !! (fromInteger i)) / (fromInteger $ facs !! (fromInteger i-1))
75 77
76-- helper function h without memoization 78-- helper function h without memoization
77h :: Integer -> Integer -> Float 79h :: Integer -> Integer -> Float
@@ -96,4 +98,4 @@ gz n
96 98
97-- goedel-number generator 99-- goedel-number generator
98gzs :: [Integer] 100gzs :: [Integer]
99gzs = map (gz) [1..] 101gzs = map gz [1..]