Вы задаете не тот вопрос.Проблема не в том, что вы находите самый большой нечетный фактор слишком медленно, а в том, что ваш алгоритм определения суммы слишком медленный, а не в том, что эта его часть слишком медленная.
Например,Наибольший нечетный коэффициент каждого нечетного числа - это само число, и есть формула для суммы первых n нечетных чисел.Почему вы не используете это, чтобы вдвое сократить количество звонков biggestOddFactor
?Это только для начала.
Наибольший коэффициент нечетности любого четного числа такой же, как и для половины этого числа.Таким образом, сумма наибольших нечетных факторов, скажем, 16, 14, 12 и 10 такая же, как для 8, 7, 6 и 5. И все же вы вычисляете эти два диапазона отдельно?Почему?
И так далее.Вам нужно оптимизировать свой алгоритм, а не реализацию плохого алгоритма.Приведенные выше концепции предлагают несколько возможных рекурсивных реализаций, которые будут намного быстрее.
Я просто очень быстро нашел решение для этой проблемы, используя лучший алгоритм, и это в тысячи раз быстрее, чем просто вызовbiggestOddFactor
на каждом номере.Обратите внимание, что мое решение является рекурсивным.
Вы должны всегда учитывать алгоритмическую оптимизацию, прежде чем пытаться микрооптимизировать реализацию.Окупаемость, как правило, намного выше, а результат гораздо менее хрупок.