pec-0.2.3: test_cases/euler/Euler14.pec
module Euler14
imports
Prelude
where
main :: () -> I32
main () = do
i = new (1 :: W32)
m = new (1 :: W32)
n = new (1 :: W32)
times 1000000
(\i -> do
l = collatz_len i
when (l > @m)
(do
m <- l
n <- i
)
)
putW @n
assert (@n == 837799)
0
collatz_len n => do
t = new (1 :: W32)
for n (\i -> i > 1) collatz (\_ -> inc t)
@t
collatz n => branch
is_odd n -> (3 * n) + 1
| n / 2
is_odd n => (n & 0x1) == 0x1