Primality by trial division: Difference between revisions

Content added Content deleted
(Added Wren)
(→‎{{header|NetRexx}}: added newLISP example)
Line 2,442: Line 2,442:


return 1 /*I'm exhausted, it's prime!*/</lang>
return 1 /*I'm exhausted, it's prime!*/</lang>

=={{header|newLISP}}==
Short-circuit evaluation ensures that the many Boolean expressions are calculated in the right order so as not to waste time.
<lang newlisp>; Here are some simpler functions to help us:

(define (divisible? larger-number smaller-number)
(zero? (% larger-number smaller-number)))

(define (int-root number)
(floor (sqrt number)))

(define (even-prime? number)
(= number 2))

; Trial division for odd numbers

(define (find-odd-factor? odd-number)
(catch
(for (possible-factor 3 (int-root odd-number) 2)
(if (divisible? odd-number possible-factor)
(throw true)))))

(define (odd-prime? number)
(and
(odd? number)
(or
(= number 3)
(and
(> number 3)
(not (find-odd-factor? number))))))

; Now for the final overall Boolean function.

(define (is-prime? possible-prime)
(or
(even-prime? possible-prime)
(odd-prime? possible-prime)))

; Let's use this to actually find some prime numbers.

(println (filter is-prime? (sequence 1 100)))
(exit)</lang>

{{Output}}
(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97)


=={{header|Nim}}==
=={{header|Nim}}==