Left factorials,   !n,   may refer to either   subfactorials   or to   factorial sums;

the same notation can be confusingly seen being used for the two different definitions.

Sometimes,   subfactorials   (also known as derangements)   may use any of the notations:

     !n`   
     !n  
     n¡  


(It may not be visually obvious, but the last example uses an upside-down exclamation mark.)



This Rosetta Code task will be using this formula   (factorial sums)   for   left factorial:


   



!
n
=

∑

k
=
0


n
−
1


k
!


{\displaystyle !n=\sum _{k=0}^{n-1}k!}




 where


   



!
0
=
0


{\displaystyle !0=0}






Task
Display the left factorials for:

   zero through ten     (inclusive)
   20   through   110   (inclusive)   by tens


Display the length (in decimal digits) of the left factorials for:

   1,000   through   10,000   (inclusive), by thousands.


Also see

   The OEIS entry: A003422 left factorials
   The MathWorld entry: left factorial
   The MathWorld entry: factorial sums
   The MathWorld entry: subfactorial


Related task

   permutations/derangements (subfactorials)


-- Lua bindings for GNU bc
require("bc")
 
-- Return table of factorials from 0 to n
function facsUpTo (n)
    local f, fList = bc.number(1), {}
    fList[0] = 1
    for i = 1, n do
        f = bc.mul(f, i)
        fList[i] = f
    end
    return fList
end
 
-- Return left factorial of n
function leftFac (n)
    local sum = bc.number(0)
    for k = 0, n - 1 do sum = bc.add(sum, facList[k]) end
    return bc.tostring(sum)
end
 
-- Main procedure
facList = facsUpTo(10000)
for i = 0, 10 do print("!" .. i .. " = " .. leftFac(i)) end
for i = 20, 110, 10 do print("!" .. i .. " = " .. leftFac(i)) end
for i = 1000, 10000, 1000 do
    print("!" .. i .. " contains " .. #leftFac(i) .. " digits")
end