Semiprime: Difference between revisions

Content added Content deleted
m (added whitespace, added a Task and example (bold) headers.)
(Added Elixir)
Line 287: Line 287:
1679 -> true
1679 -> true
1680 -> false</pre>
1680 -> false</pre>

=={{header|DCL}}==
=={{header|DCL}}==
Given a file primes.txt is the list of primes up to the sqrt(2^31-1), i.e. 46337;
Given a file primes.txt is the list of primes up to the sqrt(2^31-1), i.e. 46337;
Line 370: Line 371:
→ (2 50000000021)
→ (2 50000000021)
</lang>
</lang>

=={{header|Elixir}}==
<lang elixir>defmodule Prime do
def semiprime?(n), do: length(decomposition(n)) == 2
def decomposition(n), do: decomposition(n, 2, [])
defp decomposition(n, k, acc) when n < k*k, do: Enum.reverse(acc, [n])
defp decomposition(n, k, acc) when rem(n, k) == 0, do: decomposition(div(n, k), k, [k | acc])
defp decomposition(n, k, acc), do: decomposition(n, k+1, acc)
end

IO.inspect Enum.filter(1..100, &Prime.semiprime?(&1))
Enum.each(1675..1680, fn n ->
:io.format "~w -> ~w\t~s~n", [n, Prime.semiprime?(n), Prime.decomposition(n)|>Enum.join(" x ")]
end)</lang>

{{out}}
<pre>
[4, 6, 9, 10, 14, 15, 21, 22, 25, 26, 33, 34, 35, 38, 39, 46, 49, 51, 55, 57,
58, 62, 65, 69, 74, 77, 82, 85, 86, 87, 91, 93, 94, 95]
1675 -> false 5 x 5 x 67
1676 -> false 2 x 2 x 419
1677 -> false 3 x 13 x 43
1678 -> true 2 x 839
1679 -> true 23 x 73
1680 -> false 2 x 2 x 2 x 2 x 3 x 5 x 7
</pre>


=={{header|Erlang}}==
=={{header|Erlang}}==
Line 501: Line 530:
ok
ok
</pre>
</pre>

=={{Header|Go}}==
=={{Header|Go}}==
<lang go>package main
<lang go>package main
Line 849: Line 879:
return 0; /* never used */
return 0; /* never used */
}</lang>
}</lang>

=={{header|Pascal}}==
=={{header|Pascal}}==
{{libheader|primTrial}}{{works with|Free Pascal}}
{{libheader|primTrial}}{{works with|Free Pascal}}