Primality by trial division: Difference between revisions

Content added Content deleted
(Frink)
(Emacs Lisp: Use cl-lib)
Line 1,596: Line 1,596:


=={{header|Emacs Lisp}}==
=={{header|Emacs Lisp}}==
{{libheader|cl-lib}}
Use <tt>cl.el</tt> library.
<lang lisp>(defun prime (a)
<lang lisp>(defun prime (a)
(not (or (< a 2)
(not (or (< a 2)
(loop for x from 2 to (sqrt a)
(cl-loop for x from 2 to (sqrt a)
when (zerop (% a x))
when (zerop (% a x))
return t))))</lang>
return t))))</lang>

More concise, a little bit faster:
More concise, a little bit faster:
<lang lisp>(defun prime2 (a)
<lang lisp>(defun prime2 (a)
(and (> a 1)
(and (> a 1)
(loop for x from 2 to (sqrt a)
(cl-loop for x from 2 to (sqrt a)
never (zerop (% a x)))))</lang>
never (zerop (% a x)))))</lang>

A little bit faster:
A little bit faster:
<lang lisp>(defun prime3 (a)
<lang lisp>(defun prime3 (a)
(and (> a 1)
(and (> a 1)
(or (= a 2) (oddp a))
(or (= a 2) (cl-oddp a))
(loop for x from 3 to (sqrt a) by 2
(cl-loop for x from 3 to (sqrt a) by 2
never (zerop (% a x)))))</lang>
never (zerop (% a x)))))</lang>

More than 2 times faster, than the previous, doesn't use <tt>loop</tt> macro:
More than 2 times faster, than the previous, doesn't use <tt>loop</tt> macro:
<lang lisp>(defun prime4 (a)
<lang lisp>(defun prime4 (a)
(not (or (< a 2)
(not (or (< a 2)
(some (lambda (x) (zerop (% a x))) (number-sequence 2 (sqrt a))))))</lang>
(cl-some (lambda (x) (zerop (% a x))) (number-sequence 2 (sqrt a))))))</lang>

Almost 2 times faster, than the previous:
Almost 2 times faster, than the previous:
<lang lisp>(defun prime5 (a)
<lang lisp>(defun prime5 (a)
(not (or (< a 2)
(not (or (< a 2)
(and (/= a 2) (evenp a))
(and (/= a 2) (cl-evenp a))
(some (lambda (x) (zerop (% a x))) (number-sequence 3 (sqrt a) 2)))))</lang>
(cl-some (lambda (x) (zerop (% a x))) (number-sequence 3 (sqrt a) 2)))))</lang>


=={{header|Erlang}}==
=={{header|Erlang}}==