func Factorial(n uint64) *big.Int { if n < 20 { var r big.Int return r.MulRange(1, int64(n)) } s := swingfactorial.NewSwing(n) r := OddFactorial(s, n) exp := uint(n - uint64(xmath.BitCount64(n))) return r.Lsh(r, exp) }