summaryrefslogtreecommitdiff
path: root/euler26.scm
diff options
context:
space:
mode:
Diffstat (limited to 'euler26.scm')
-rw-r--r--euler26.scm30
1 files changed, 30 insertions, 0 deletions
diff --git a/euler26.scm b/euler26.scm
new file mode 100644
index 0000000..6c01409
--- /dev/null
+++ b/euler26.scm
@@ -0,0 +1,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)