Special factorials: Difference between revisions

Content added Content deleted
(Added Wren)
(julia example)
Line 107: Line 107:
rf(3628800) = 10
rf(3628800) = 10
rf(119) = f
rf(119) = f
</pre>

==((header|Julia}}==
No recursion.
<lang julia># No recursion.

superfactorial(n) = n < 1 ? 1 : mapreduce(factorial, *, 1:n)
sf(n) = superfactorial(n)

hyperfactorial(n) = n < 1 ? 1 : mapreduce(i -> i^i, *, 1:n)
H(n) = hyperfactorial(n)

alternating_factorial(n) = n < 1 ? -1 : mapreduce(i -> (-1)^(n - i) * factorial(i), +, 1:n)
af(n) = alternating_factorial(n)

exponential_factorial(n) = n < 1 ? 1 : foldl((x, y) -> y^x, 1:n)
n$(n) = exponential_factorial(n)

function reverse_factorial(n)
for i in 1:100000
fac = factorial(typeof(n)(i))
fac == n && return i
fac > n && break
end
return nothing
end
rf(n) = reverse_factorial(n)

println("N Superfactorial Hyperfactorial Alternating Factorial Exponential Factorial\n", "-"^88)
for n in 0:9
print(n, " ")
for f in [sf, H, af, n$]
if n < 5 || f != n$
print(rpad((f(n)), 25))
end
end
println()
end

println("\nThe number of digits in n$(5) is ", length(string(n$(BigInt(5)))))

println("\n\nN Reverse Factorial\n", "-"^25)
for n in [1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 119]
println(rpad(n, 10), rf(n))
end
</lang>{{out}}
<pre>
N Superfactorial Hyperfactorial Alternating Factorial Exponential Factorial
----------------------------------------------------------------------------------------
0 1 1 -1 1
1 1 1 1 1
2 2 4 1 2
3 12 108 5 9
4 288 27648 19 262144
5 34560 86400000 101
6 24883200 4031078400000 619
7 125411328000 3319766398771200000 4421
8 5056584744960000 -907465429310504960 35899
9 8705808953839190016 2649120435010011136 326981

The number of digits in n$(5) is 183231


N Reverse Factorial
-------------------------
1 1
2 2
6 3
24 4
120 5
720 6
5040 7
40320 8
362880 9
3628800 10
119 nothing
</pre>
</pre>