Я занимаюсь проблемами 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
Это, кажется, во всех приличных алгоритмов. Я работал над этим на бумаге с меньшими числами, и я вижу, что это приводит к сближению чисел, но я не понимаю, почему эта операция сходится на самом большом первичном множителе.
Может ли кто-нибудь объяснить?
Попробуйте это с большим числом чисел, например n = 10^18 + 3. Алгоритм по-прежнему равен O (sqrt (n)), когда есть гораздо более эффективные алгоритмы факторинга –
Довольно простой - алгоритм Роллалла с ожидаемой сложностью O (n^(1/4)) –