Мне кажется, что шаг №2 данного алгоритма не будет таким уж эффективным подходом. У вас нет разумных ожиданий, что оно простое.
Кроме того, предыдущий ответ, предполагающий сито Эратосфена, совершенно неверен. Я просто написал две программы с множителем 123456789. Одна была основана на сите, другая - на следующем:
1) Test = 2
2) Current = Number to test
3) If Current Mod Test = 0 then
3a) Current = Current Div Test
3b) Largest = Test
3c) Goto 3.
4) Inc(Test)
5) If Current < Test goto 4
6) Return Largest
Эта версия была в 90 раз быстрее сита.
Дело в том, что на современных процессорах тип операции имеет гораздо меньшее значение, чем количество операций, не говоря уже о том, что приведенный выше алгоритм может выполняться в кеше, а Sieve - нет. Сито использует много операций, вычеркивая все составные числа.
Также обратите внимание, что мои факторы разделения по мере их определения сокращают пространство, которое необходимо проверить.