module AufgabeFFP2 where -- 1 primes :: [Integer] primes = sieve [2 ..] -- sieve of eratosthenes (according to lecture slides) sieve :: [Integer] -> [Integer] sieve (x:xs) = x : sieve [ y | y <- xs, mod y x > 0] -- generate all pairs with map and then filter only the valid ones -- TODO: filtering should be optimized, still a bit slow pps :: [(Integer, Integer)] pps = filter validPair $ map (\x -> (x,x+2)) primes where -- pair is valid if the second component n is a prime -- since simply checking if the Integer is element of the prime-list -- does not terminate for non-primes, we take the first n primes validPair :: (Integer,Integer) -> Bool validPair (_,maybePrime) = elem maybePrime $ take (fromInteger maybePrime) primes ------------------------------------------------------------------------------- -- 2 -- generates powers of 2 pof2s :: [Integer] pof2s = [1] ++ (map (2*) pof2s) pow :: Int -> Integer pow 0 = 1 pow n = pow (n-1) + pow (n-1) -- uses memtable for power-calculation powFast :: Int -> Integer powFast 0 = 1 powFast n = pof2s !! (n-1) + pof2s !! (n-1) -------------------------------------------------------------------------------