На самом деле есть несколько более эффективных способов найти факторы больших чисел (для более мелких пробное деление работает достаточно хорошо).
Один метод, который очень быстр, если входное число имеет два фактора, очень близких к его квадратному корню, известен как Факторизация Ферма . Он использует тождество N = (a + b) (a - b) = a ^ 2 - b ^ 2 и прост для понимания и реализации. К сожалению, это не очень быстро в целом.
Самым известным методом для вычисления чисел длиной до 100 цифр является Квадратное сито . В качестве бонуса, часть алгоритма легко выполняется с параллельной обработкой.
Еще один алгоритм, о котором я слышал, это Алгоритм Полларда Rho . Он не так эффективен, как Quadratic Sieve в целом, но, кажется, его легче реализовать.
Как только вы решили, как разбить число на два фактора, вот самый быстрый алгоритм, который я могу придумать, чтобы найти наибольший простой множитель числа:
Создать приоритетную очередь, в которой изначально хранится сам номер. На каждой итерации вы удаляете наибольшее число из очереди и пытаетесь разделить его на два фактора (конечно, не позволяя 1 быть одним из этих факторов). Если этот шаг не пройден, число простое, и у вас есть ответ! В противном случае вы добавляете два фактора в очередь и повторяете.