其他解法请参考: http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html
Arithmetic
-
P31 (**) Determine whether a given integer number is prime. (判断一个数是不是
-
Example:
* (is-prime 7)
T
(defun is-prime (num) (let ((n (sqrt num))) (labels ((rec (i) (if (> i n) t (and (not (zerop (mod num i))) (rec (1+ i)))))) (rec 2))))
P32 (**) Determine the greatest common divisor of two positive integer numbers.
-
Use Euclid's algorithm.
Example:
* (gcd 36 63)
9
(defun my-gcd (n1 n2) (if (zerop n2) n1 (my-gcd n2 (mod n1 n2))))
P33 (*) Determine whether two positive integer numbers are coprime.
-
Two numbers are coprime if their greatest common divisor equals 1.
Example:
* (coprime 35 64)
T
(defun coprime (n1 n2) (= (my-gcd n1 n2) 1))