(defun f (primes basis bound prod sum zero-ok) (declare (optimize (speed 3) (safety 0)) (type integer bound prod sum)) (loop repeat (if zero-ok 10 9) with p fixnum = (car primes) and prest = (cdr primes) and b integer = (car basis) and brest = (cdr basis) for newbd integer = (if zero-ok bound (floor bound p)) then (floor newbd p) for newprod integer = (if zero-ok prod (* prod p)) then (* newprod p) for newsum integer = (if zero-ok sum (+ sum b)) then (+ newsum b) while (and (plusp newbd) (<= newprod newsum)) nconc (if prest (f prest brest newbd newprod newsum t) (if (= newprod newsum) (list newsum) nil))))