Create a function that accepts a positive integer and an upper bound and returns the largest remainder resulting from dividing the given integer by a positive integer that's less than the given bound.
$ cat lrd.rkt #lang racket (require rackunit srfi/1) (define (lrd n d-max) (let loop ((d (- d-max 1)) (r-max 0)) (if (<= d r-max) r-max (loop (- d 1) (max (remainder n d) r-max))))) (define (lrd2 n d-max) (fold max 0 (map (lambda (d) (remainder n (+ d 1))) (iota (- d-max 1))))) (do ((n 1 (+ n 1))) ((> n 101)) (do ((d 1 (+ d 1))) ((= d n)) (check-eq? (lrd n d) (lrd2 n d)))) (define (time-it f N) (let-values (((a b c d) (time-apply (lambda () (do ((n 1 (+ n 1))) ((> n N)) (do ((d 1 (+ d 1))) ((= d N)) (f n d)))) '()))) b)) (define N 400) (printf "lrd msec: ~a\n" (time-it lrd N)) (printf "lrd2 msec: ~a\n" (time-it lrd2 N)) $ mzscheme lrd.rkt lrd msec: 180 lrd2 msec: 4784 $