summaryrefslogtreecommitdiff
path: root/euler26.scm
blob: 6c014095492cec07da35620ca4cfeb489b7d3ea8 (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
(define (recur-cycle n)
 (define (div_2_5 x)
  (cond 
   ((= (remainder x 2) 0)
	(div_2_5 (/ x 2)))
   ((= (remainder x 5) 0)
	(div_2_5 (/ x 5)))
   (else x)))
 (define (try-iter m r)
  (if (= r 1)
   m
   (try-iter (+ m 1) (remainder (* r 10) n))))
 (if (= (div_2_5 n) n)
  (if (= n 1)
   0
   (try-iter 1 (remainder 10 n)))
  (recur-cycle (div_2_5 n))))

(define (longest upper)
 (define (try-iter n ans anscycle)
  (if (> n upper)
   ans
   (let ((m (recur-cycle n)))
	 (if (> m anscycle)
	  (try-iter (+ n 1) n m)
	  (try-iter (+ n 1) ans anscycle)))))
 (try-iter 1 1 0))

(display (longest (read)))
(newline)