Primality by trial division: Difference between revisions
Content added Content deleted
(→{{header|Picat}}: Split into subsections.) |
|||
Line 3,053: | Line 3,053: | ||
=={{header|Picat}}== |
=={{header|Picat}}== |
||
Here are four different versions. |
|||
===Iterative=== |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
* testing and generating: prime2/1 (2.129s) {{trans|Prolog}} |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
% iterative |
|||
⚫ | |||
if N == 2 then |
if N == 2 then |
||
true |
true |
||
Line 3,080: | Line 3,064: | ||
N mod I > 0 |
N mod I > 0 |
||
end |
end |
||
end. |
end.</lang> |
||
===Recursive=== |
|||
% recursive |
|||
is_prime2(N) => |
<lang Picat>is_prime2(N) => |
||
(N == 2 ; is_prime2b(N,3)). |
(N == 2 ; is_prime2b(N,3)). |
||
Line 3,095: | Line 3,079: | ||
; |
; |
||
is_prime2b(N,Div+2) |
is_prime2b(N,Div+2) |
||
). |
).</lang> |
||
===Functional=== |
|||
is_prime3(2) => true. |
<lang Picat>is_prime3(2) => true. |
||
is_prime3(3) => true. |
is_prime3(3) => true. |
||
is_prime3(P) => P > 3, P mod 2 =\= 0, not has_factor3(P,3). |
is_prime3(P) => P > 3, P mod 2 =\= 0, not has_factor3(P,3). |
||
has_factor3(N,L), N mod L == 0 => true. |
has_factor3(N,L), N mod L == 0 => true. |
||
has_factor3(N,L) => L * L < N, L2 = L + 2, has_factor3(N,L2). |
has_factor3(N,L) => L * L < N, L2 = L + 2, has_factor3(N,L2).</lang> |
||
===Generator approach=== |
|||
{{trans|Prolog}} |
|||
⚫ | |||
⚫ | |||
% Translation of Prolog version. |
|||
⚫ | |||
⚫ | |||
<lang Picat>prime2(2). |
|||
% |
|||
⚫ | |||
⚫ | |||
⚫ | |||
prime2(N) :- |
prime2(N) :- |
||
between(3, 2**156+1, N), |
between(3, 2**156+1, N), |
||
Line 3,118: | Line 3,102: | ||
Max is (M-1) // 2, % integer division |
Max is (M-1) // 2, % integer division |
||
foreach(I in 1..Max) N mod (2*I+1) > 0 end.</lang> |
foreach(I in 1..Max) N mod (2*I+1) > 0 end.</lang> |
||
===Test=== |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
{{out}} |
{{out}} |
||
Line 3,128: | Line 3,123: | ||
[100000,9592] |
[100000,9592] |
||
[1000000,78498]</pre> |
[1000000,78498]</pre> |
||
===Benchmark=== |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
* test/generate <code>prime2/1</code> (2.129s) |
|||
=={{header|PicoLisp}}== |
=={{header|PicoLisp}}== |