30.01.2022

Как найти натуральные делители числа более эффективно (быстро)

 Как найти натуральные делители числа более эффективно (быстро)?

Пусть 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() позволяет отсечь целую часть числа и преобразовать число к целому типу.

Комментариев нет:

Отправить комментарий