21 lines
703 B
Common Lisp
21 lines
703 B
Common Lisp
(defun farey (n)
|
|
(labels ((helper (begin end)
|
|
(let ((med (/ (+ (numerator begin) (numerator end))
|
|
(+ (denominator begin) (denominator end)))))
|
|
(if (<= (denominator med) n)
|
|
(append (helper begin med)
|
|
(list med)
|
|
(helper med end))))))
|
|
(append (list 0) (helper 0 1) (list 1))))
|
|
|
|
|
|
;; Force printing of integers in X/1 format
|
|
(defun print-ratio (stream object &optional colonp at-sign-p)
|
|
(format stream "~d/~d" (numerator object) (denominator object)))
|
|
|
|
(loop for i from 1 to 11 do
|
|
(format t "~a: ~{~/print-ratio/ ~}~%" i (farey i)))
|
|
|
|
(loop for i from 100 to 1001 by 100 do
|
|
(format t "Farey sequence of order ~a has ~a terms.~%" i (length (farey i))))
|