Как найти натуральные делители числа более эффективно (быстро)?
Пусть N=100.
Делителями числа 100 являются числа: 1, 2, 4, 5, 10, 20, 25, 50, 100.
Найдем "симметричные" пары делителей:
1 и 100, 2 и 50, 4 и 25, 5 и 20, 10 и ...все :)
Произведения этих пар чисел дают само число 100. Воспользуемся этим. Будем находить сразу 2 делителя: k и N div k. Тогда как долго "крутить" цикл? До корня квадратного из N.
Фрагмент программы на языке Паскаль:
for k:=1 to trunc(sqrt(N)) do
if N mod k = 0 then
if k <> N div k then writeln(k,' ',N div k) else writeln(k);
Условие k <> N div k необходимо для вывода сразу двух делителей или только одного, в случае, если число N является квадратом.
Функция trunc() позволяет отсечь целую часть числа и преобразовать число к целому типу.
Комментариев нет:
Отправить комментарий