<?php function divisors($n) { // Shortcut evaluation for 1. if ($n === 1) { return 1; } $candidates = range(2, (int) ceil(sqrt($n))); $curr = $n; $divs = [1, $curr]; while ($candidates) { $candidate = array_shift($candidates); if ($curr % $candidate == 0) { $divs[$candidate] = $candidate; $other = $curr / $candidate; $divs[$other] = $other; } } return count($divs); }