summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AufgabeFFP2.hs41
1 files changed, 41 insertions, 0 deletions
diff --git a/AufgabeFFP2.hs b/AufgabeFFP2.hs
new file mode 100644
index 0000000..e66b7a8
--- /dev/null
+++ b/AufgabeFFP2.hs
@@ -0,0 +1,41 @@
1module AufgabeFFP2
2where
3
4-- 1
5
6primes :: [Integer]
7primes = sieve [2 ..]
8
9-- sieve of eratosthenes (according to lecture slides)
10sieve :: [Integer] -> [Integer]
11sieve (x:xs) = x : sieve [ y | y <- xs, mod y x > 0]
12
13-- generate all pairs with map and then filter only the valid ones
14-- TODO: filtering should be optimized, still a bit slow
15pps :: [(Integer, Integer)]
16pps = filter validPair $ map (\x -> (x,x+2)) primes
17 where
18 -- pair is valid if the second component n is a prime
19 -- since simply checking if the Integer is element of the prime-list
20 -- does not terminate for non-primes, we take the first n primes
21 validPair :: (Integer,Integer) -> Bool
22 validPair (_,maybePrime) = elem maybePrime $ take (fromInteger maybePrime) primes
23
24-------------------------------------------------------------------------------
25
26-- 2
27
28-- generates powers of 2
29pof2s :: [Integer]
30pof2s = [1] ++ (map (2*) pof2s)
31
32pow :: Int -> Integer
33pow 0 = 1
34pow n = pow (n-1) + pow (n-1)
35
36-- uses memtable for power-calculation
37powFast :: Int -> Integer
38powFast 0 = 1
39powFast n = pof2s !! (n-1) + pof2s !! (n-1)
40
41------------------------------------------------------------------------------- \ No newline at end of file