public static function factors(int $x) : array { // 0 has infinite factors if ($x === 0) { return [\INF]; } $x = abs($x); $√x = floor(sqrt($x)); $factors = []; for ($i = 1; $i <= $√x; $i++) { if ($x % $i === 0) { $factors[] = $i; if ($i !== $√x) { $factors[] = $x / $i; } } } sort($factors); return $factors; }