blob: baf067d253489f3b266b981e693cfea1cb09fa20 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
{-# LANGUAGE NoImplicitPrelude #-}
import Internals
--infixr 9 .
infixr 0 $
f $ x = f x
id x = x
foldr _ e [] = e
foldr f e (x: xs) = f x $ foldr f e xs
{-
foldr x1 x2 x3 = case x3 of
[] -> x2
x: xs -> x1 x $ foldr x1 x2 xs
-}
filter p = foldr (\x xs -> if p x then x: xs else xs) []
True && a = a
False && _ = False
and = foldr (&&) True
map f = foldr (\x xs -> f x: xs) []
mod = primModInt
iSqrt a = primRound (primSqrtFloat (primIntToFloat a))
(+) = primAddInt
(-) = primSubInt
a <= b = case primCompareInt a b of
GT -> False
_ -> True
not False = True
not True = False
a /= b = not $ a == b
takeWhile p (x: xs) | p x = x: takeWhile p xs
takeWhile _ _ = []
from n = n: from (n + 1)
primes :: [Int]
primes = 2:3: filter (\n -> and $ map (\p -> n `mod` p /= 0) (takeWhile (\x -> x <= iSqrt n) primes)) (from 5)
(x: _) !! 0 = x
(_ : xs) !! n = xs !! (n-1)
main = primes !! 10 -- TODO: 100
|