diff options
author | Iru Cai <mytbk920423@gmail.com> | 2018-05-24 21:39:58 +0800 |
---|---|---|
committer | Iru Cai <mytbk920423@gmail.com> | 2018-05-24 21:39:58 +0800 |
commit | 1eefd58ca4fdb5d2f51f657bfd70c9a89a4707db (patch) | |
tree | abde0e4da3c7fe138f3874a94d8eb7d0e44c3224 /euler14.scm | |
download | project_euler-1eefd58ca4fdb5d2f51f657bfd70c9a89a4707db.tar.xz |
initial commit
Diffstat (limited to 'euler14.scm')
-rw-r--r-- | euler14.scm | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/euler14.scm b/euler14.scm new file mode 100644 index 0000000..3adc07a --- /dev/null +++ b/euler14.scm @@ -0,0 +1,28 @@ +(define (chainlen n) + (define (next m) + (if (even? m) + (/ m 2) + (+ (* m 3) 1))) + (define (count-iter cur cnt) + (if (= cur 1) + cnt + (count-iter (next cur) (+ cnt 1)))) + (count-iter n 1)) + +(define (find-max-len-start limit) + (define (try cur longest ans) + (cond ((> cur limit) ans) + ((= (remainder (- cur 4) 6) 0) + ;it's even and is 3n+1=>it's 6n+4 + (try (+ cur 1) longest ans)) + (else + (let ((len (chainlen cur)) + (curn (+ cur 1))) + (if (> len longest) + (try curn len cur) + (try curn longest ans)))))) + (let ((lowest (ceiling (/ limit 2)))) + (try lowest 1 lowest))) + +(display (find-max-len-start 999999)) +(newline) |