Calculates n!
n
BigInt factorial(int n) => factCache.containsKey(n) ? factCache[n]! : (n < 2 ? BigInt.one : factCache[n] = BigInt.from(n) * factorial(n - 1));