public static function subfactorial(int $n)
{
if ($n < 0) {
throw new Exception\OutOfBoundsException('Cannot compute subfactorial of a negative number.');
}
$n! = self::factorial($n);
$∑ = 0;
for ($i = 0; $i <= $n; $i++) {
$i! = self::factorial($i);
$∑ += (-1) ** $i / $i!;
}
return $n! * $∑;
}