RosettaCodeData/Task/Arbitrary-precision-integers-included-/Elixir/arbitrary-precision-integers-included-.elixir
2023-07-01 13:44:08 -04:00

17 lines
469 B
Text

defmodule Arbitrary do
def pow(_,0), do: 1
def pow(b,e) when e > 0, do: pow(b,e,1)
defp pow(b,1,acc), do: acc * b
defp pow(b,p,acc) when rem(p,2)==0, do: pow(b*b,div(p,2),acc)
defp pow(b,p,acc), do: pow(b,p-1,acc*b)
def test do
s = pow(5,pow(4,pow(3,2))) |> to_string
l = String.length(s)
prefix = String.slice(s,0,20)
suffix = String.slice(s,-20,20)
IO.puts "Length: #{l}\nPrefix:#{prefix}\nSuffix:#{suffix}"
end
end
Arbitrary.test