language: Scheme (guile) (guile 1.8.5)
date: 115 days 5 hours ago
link:
visibility: public
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
(define square
(lambda (x)
(* x x)))
 
(define exp
(lambda (a b)
(cond ((= 0 b) 1)
((even? b) (square (exp a (/ b 2))))
(else (* a (exp a (- b 1)))))))
 
(define fib
(lambda (n)
(let ((fibn (floor (/ (exp (inexact->exact (/ (+ 1 (sqrt 5)) 2)) n) (inexact->exact (sqrt 5))))))
(if (= 1 (modulo n 2)) (+ 1 fibn) fibn))))
 
(define nbdigits
(lambda (a acc)
(if (= 0 a) acc (nbdigits (quotient a 10) (+ 1 acc)))))
 
 
(define atleast1000digits
(lambda (n)
(if (< (nbdigits (fib n) 0) 1000) (atleast1000digits (+ n 1)) n)))
 
(define find1000digits
(lambda (a b)
(let* ((m (quotient (+ a b) 2))
      (d (nbdigits (fib m) 0)))
(if (= d 1000) (if (= (nbdigits (fib (- m 1)) 0) 1000) (find1000digits a m)  m)
               (if (< d 1000) (find1000digits m b) (find1000digits a m))))))
 
(write (find1000digits 1 10000))