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}}== |