Factorial primes: Difference between revisions
Content added Content deleted
(Add Mathematica/Wolfram Language implementation) |
Rswalsh0509 (talk | contribs) (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> |
||