Largest Possible Remainder problem in racket:

;;lr = largest remainder so far lrd = divisor with largest remainder
(define (largest-remainder n d (lr 0) (lrd 0))
(cond
[(= d 0) (values lr lrd)] ;;catch cases like n = 6, d = 3
[(> lr d) (values lr lrd)] ;;stop when d is < largest remainder
[(> (modulo n d) lr)
(largest-remainder n (sub1 d) (modulo n d) d)] ;;save new largest remainder
[else
(largest-remainder n (sub1 d) lr lrd)])) ;;iterate with d-1

Common Lisp translation:

(defun largest-remainder (n d &optional (lr 0) (lrd 0))
(cond
((<= d 0) (values lr lrd))
((< d lr) (values lr lrd))
(t (let ((r (rem n d)))
(if (> r lr)
(largest-remainder n (1- d) r d)
(largest-remainder n (1- d) lr lrd))))))

Iterative in python.

def largest_remainder(n,d):
lr = 0
lrd = 0
while (d >= lr) and (d > 0):
if (n % d > lr):
lr = n % d
lrd = d
d -= 1
return (lr,lrd)
print largest_remainder(20,10)
print largest_remainder(6,3)

### Like this:

Like Loading...