Factorial primes: Difference between revisions

Content added Content deleted
(Add Mathematica/Wolfram Language implementation)
(Added Common Lisp implementation without advanced primality testing.)
 
Line 403: Line 403:
30: 469! - 1 = 67718096668149510900...99999999999999999999 (1051 digits)
30: 469! - 1 = 67718096668149510900...99999999999999999999 (1051 digits)
31: 546! - 1 = 14130200926141832545...99999999999999999999 (1260 digits)
31: 546! - 1 = 14130200926141832545...99999999999999999999 (1260 digits)
</pre>

=={{header|Common Lisp}}==

Simple implementation without using advanced primality testing.

<syntaxhighlight lang="lisp">
(defun factorial (x)
(if (= x 1)
x
(* x (factorial (- x 1)))))

(defun is-factor (x y)
(zerop (mod x y)))

(defun is-prime (n)
(cond ((< n 4) (or (= n 2) (= n 3)))
((or (zerop (mod n 2)) (zerop (mod n 3))) nil)
(t (loop for i from 5 to (floor (sqrt n)) by 6
never (or (is-factor n i)
(is-factor n (+ i 2)))))))

(defun main (&optional (limit 10))
(let ((n 0)
(f 0))
(loop while (< n limit)
for i from 1
do (setf f (factorial i))
(when (is-prime (+ f 1))
(incf n)
(format t "~2d: ~2d! + 1 = ~12d~%" n i (+ f 1)))
(when (is-prime (- f 1))
(incf n)
(format t "~2d: ~2d! - 1 = ~12d~%" n i (- f 1))))))
</syntaxhighlight>

{{out}}
<pre>
1: 1! + 1 = 2
2: 2! + 1 = 3
3: 3! + 1 = 7
4: 3! - 1 = 5
5: 4! - 1 = 23
6: 6! - 1 = 719
7: 7! - 1 = 5039
8: 11! + 1 = 39916801
9: 12! - 1 = 479001599
10: 14! - 1 = 87178291199
</pre>
</pre>