Чтобы ограничить пространство поиска, вы должны начать с 2 и работать до квадратного корня из числа. Статистически говоря, гораздо больше чисел (в конечном пространстве поиска), делимых на 2, чем на 27, поэтому вы с большей вероятностью получите низкий делитель, чем высокий.
Вы найдете большую разницу при использовании квадратного корня, а не половину значения при обработке (например) 1 000 000. Разница между областью поиска 500 000 для вашего метода и 1000 для метода квадратного корня является значительной.
Еще одним преимуществом является уменьшение пространства поиска вдвое вперед путем дисконтирования кратных двум. Затем, когда у вас самый низкий делитель, самый высокий делится просто на число, деленное на это.
псевдокод:
if n % 2 == 0: # Halve search space straight up.
print n / 2
else:
i = 3 # Start at 3.
while i * i <= n: # Or use i <= sqrt(n), provided sqrt is calc'ed once
if n % i == 0:
print n / i # If multiple, get opposite number, print and stop
break
i = i + 2 # Only need to process odd numbers