Emirp primes: Difference between revisions

Content added Content deleted
(Added Common Lisp)
Line 588: Line 588:
10,000: 948349
10,000: 948349
</pre>
</pre>



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

It uses a primitive prime function found in http://www.rosettacode.org/wiki/Primality_by_trial_division, not optimized at all.
<lang Lisp>(defun primep (n)
"Is N prime?"
(and (> n 1)
(or (= n 2) (oddp n))
(loop for i from 3 to (isqrt n) by 2
never (zerop (rem n i)))))

(defun reverse-digits (n)
(labels ((next (n v)
(if (zerop n) v
(multiple-value-bind (q r)
(truncate n 10)
(next q (+ (* v 10) r))))))
(next n 0)))

(defun emirp (&key (count nil) (start 10) (end nil) (print-all nil))
(do* ((n start (1+ n))
(c count) )
((or (and count (<= c 0)) (and end (>= n end))))
(when (and (primep n) (not (= n (reverse-digits n))) (primep (reverse-digits n)))
(when print-all (format t "~a " n))
(when count (decf c)) )))


(progn
(format t "First 20 emirps: ") (emirp :count 20 :print-all t)
(format t "~%Emirps between 7700 and 8000: ") (emirp :start 7700 :end 8000 :print-all t)
(format t "~%The 10,000'th emirp: ") (emirp :count 10000 :print-all nil) )
</lang>

{{out}}
<pre>First 20 emirps: 13 17 31 37 71 73 79 97 107 113 149 157 167 179 199 311 337 347 359 389
Emirps between 7700 and 8000: 7717 7757 7817 7841 7867 7879 7901 7927 7949 7951 7963
The 10,000'th emirp: 948349</pre>




=={{header|D}}==
=={{header|D}}==