Вспомнил, что такое "натуральные числа", решил задачу самым наивным образом и убедился, что быстрее решить нельзя.
Условия задачи
"Если выписать все натуральные числа меньше 10, кратные 3 или 5, то получим 3, 5, 6 и 9. Сумма этих чисел равна 23.
Найдите сумму всех чисел меньше 1000, кратных 3 или 5."
Натуральные числа
Первым делом начал вспоминать, что такое "натуральные" числа. Оказалось, что никакого подвоха нет, это обычные числа, которые мы каждый день применяем в быту при счете: 1, 2, 3 и т.д.
Решаю задачу самым простым способом
Создаем переменную res = 0 для записи результата вычислений.
Перебираем в цикле числа от 1 до 1000 (т.е. до 999 включительно).
Если остаток от деления (i%3 == 0) равен нулю, значит число делится на 3 нацело. Если число делится нацело на 3 или на 5, то прибавляем это число к переменной res.
Несколько раз запускал программу и время вычисления колебалось от 0.288 до 0.397 секунд.
Можно ли решить быстрее?
Т.к. периодически я "балуюсь" arduino, то первым делом я начал экономить память. К чему такое расточительство - использовать 4 байта int, если достаточно 2 байт short.
Естественно, разницы в скорости вычислений я не заметил.
Затем подумал про указатели, зачем копировать данные из одной переменной в другую, если можно передавать просто адрес в памяти, где хранится эта информация.
Добавил указатель *ptr на область памяти переменной res (результат) и работал не с переменной, а с ним.
Скорость в вычисления также не изменилась.
Решил увеличить диапазон натуральных чисел в десять раз и посмотреть - замедлится ли работа программы.
Увеличил значение i до 10000 - скорость выполнения программы опять не изменилась, программа не замедлилась.
Как вывод, понял, что определяющую роль во времени вычисления в данном случае играет работа самого редактора кода VScode, а работа самого кода почти мгновенна.
Попробую ее ускорить в следующих, более сложных задачах.
Ответ на задачу:
P.S. Изначальная цель блога - получить "фидбек" в комментариях, чтобы более опытные "кодеры" указывали мне на ошибки, советовали и всячески помогали в саморазвитии.
Также приглашаю всех на мой сайт)
На нем Вы можете посмотреть ответ на задачу Эйлера #1 (когда необходима лишь небольшая подсказка) и последний, самый быстрый вариант решения.
В общем, добро пожаловать на канал))