397 подписчиков

Решение 1 задачи проекта Эйлера: Числа, кратные 3 или 5

517 прочитали

Вспомнил, что такое "натуральные числа", решил задачу самым наивным образом и убедился, что быстрее решить нельзя.

Условия задачи

"Если выписать все натуральные числа меньше 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.

Заменил тип данных переменной i на short int
Заменил тип данных переменной i на short int

Естественно, разницы в скорости вычислений я не заметил.

Затем подумал про указатели, зачем копировать данные из одной переменной в другую, если можно передавать просто адрес в памяти, где хранится эта информация.

Вариант программы с указателями
Вариант программы с указателями

Добавил указатель *ptr на область памяти переменной res (результат) и работал не с переменной, а с ним.

Скорость в вычисления также не изменилась.

Решил увеличить диапазон натуральных чисел в десять раз и посмотреть - замедлится ли работа программы.

Увеличил значение i до 10000
Увеличил значение i до 10000

Увеличил значение i до 10000 - скорость выполнения программы опять не изменилась, программа не замедлилась.

Как вывод, понял, что определяющую роль во времени вычисления в данном случае играет работа самого редактора кода VScode, а работа самого кода почти мгновенна.

Попробую ее ускорить в следующих, более сложных задачах.

Ответ на задачу:

P.S. Изначальная цель блога - получить "фидбек" в комментариях, чтобы более опытные "кодеры" указывали мне на ошибки, советовали и всячески помогали в саморазвитии.

Также приглашаю всех на мой сайт)

На нем Вы можете посмотреть ответ на задачу Эйлера #1 (когда необходима лишь небольшая подсказка) и последний, самый быстрый вариант решения.

А Вы подписались на канал?
А Вы подписались на канал?

В общем, добро пожаловать на канал))