Это полностью ваш выбор, будете ли вы довольны решением или хотите улучшить его дальше. Существует много проблем проекта Эйлера, в которых решение грубой силы займет слишком много времени, и вам придется искать хитрый алгоритм.
Задача 2 не требует какой-либо оптимизации. Ваше решение уже более чем достаточно быстро.
Еще позвольте мне объяснить, какая оптимизация возможна. Часто это помогает сделать некоторые исследования по этому вопросу. Например. страница вики на числа Фибоначчи содержит эту формулу
fib (n) = (phi ^ n - (1-phi) ^ n) / sqrt (5)
где фи - золотое сечение. * 1011 Т.е. *
phi = (sqrt (5) +1) /2.
Если вы используете, что fib (n) приблизительно равно phi ^ n / sqrt (5), то вы можете найти индекс наибольшего числа Фибоначчи, меньшего, чем M, на
n = этаж (журнал (M * sqrt (5)) / журнал (phi)).
например. для M = 4000000 мы получаем n = 33, следовательно, fib (33) наибольшее число Фибоначчи меньше 4000000. Можно наблюдать, что fib (n) четное, если n кратно 3. Следовательно, сумма четного числа Фибоначчи цифры
fib (0) + fib (3) + fib (6) + ... + fib (3k)
Чтобы найти закрытую форму, мы используем формулу выше со страницы википедии и заметим, что
сумма, по сути, всего две геометрических рядов . Математика не совсем тривиальна, но, используя эти идеи, можно показать, что
fib (0) + fib (3) + fib (6) + ... + fib (3k) = (fib (3k + 2) - 1) / 2.
Поскольку fib (n) имеет размер O (n), прямое решение имеет сложность O (n ^ 2).
Используя приведенную выше закрытую формулу вместе с быстрым методом для вычисления чисел Фибоначчи
имеет сложность O (n log (n) ^ (1 + эпсилон)). Для небольших чисел любое решение, конечно, хорошо.