Я решал некоторые задачи Project Euler, чтобы изучить/попрактиковаться в Lua, и мой первоначальный быстрый и грязный способ нахождения наибольшего простого множителя n
был довольно плохим, поэтому я посмотрел код, чтобы посмотреть, как это делают другие (в попытки понять различные методологии факторинга).
Я наткнулся на следующее (изначально на Python — это мой Lua):
function Main()
local n = 102
local i = 2
while i^2 < n do
while n%i==0 do n = n / i end
i = i+1
end
print(n)
end
Это привело к огромному количеству пользователей за очень короткое время — почти мгновенно. Вещь, которую я заметил в алгоритме, которую я бы не угадал:
n = n / i
Это, кажется, во всех приличных алгоритмах. Я проделал это на бумаге с меньшими числами и вижу, что это приводит к сходимости чисел, но я не понимаю, почему эта операция сходится по наибольшему простому множителю.
Кто-нибудь может объяснить?