-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path10.slap
More file actions
38 lines (35 loc) · 1013 Bytes
/
10.slap
File metadata and controls
38 lines (35 loc) · 1013 Bytes
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
-- Project Euler #10: Summation of Primes
-- Sum of all primes below 2,000,000.
-- Answer: 142913828922
--
-- Odd-only Sieve of Eratosthenes: arr[k] represents 2k+1. Size 1,000,000
-- covers odd numbers up to 1,999,999. Mark composites during `mutate`
-- (set only, no reads), then `lend` and sum via O(1) `nth` reads.
list 1000000 (1 push) repeat box 'sv let
sv (
0 0 set must -- 1 is not prime
1
(dup 2 mul 1 plus dup mul 2000000 lt) -- (2i+1)^2 < 2M
(
'i let
i 2 mul 1 plus 'p let -- p = 2i+1
i i 1 plus mul 2 mul -- initial j = 2*i*(i+1)
(dup 1000000 lt)
(dup (0 set must) dip p plus) while
drop
i 1 plus
) while
drop
) mutate 'svb let
svb (
'data let
2 1 -- sum=2 (even prime), k=1
(dup 1000000 lt)
(
'k let
'data k nth must 1 eq (k 2 mul 1 plus plus) () if
k 1 plus
) while
drop
) lend
swap free print