(i % 3) – любое ненулевое число внутри оператора if() будет восприниматься как true (истина).
Условие будет срабатывать и будет работать код после if()
! – операция “не” инвертирует значение true в false и наоборот.
Таким образом if (!(i % 3)) – сработает если остаток от деления будет равен нулю, следовательно числа делятся нацело
Измеряем время работы программы
Для измерения времени работы программы подключаем библиотеку time.h:
#include <time.h>
С помощью функции clock() измеряем время начала (begin) и окончания (end) работы программы. В итоге время работы будем находить как разность между ними.
CLOCKS_PER_SEC – это константа, сохраненная в библиотеке и зависящая от типа устройства, на котором запускается программа. В данном случае – это просто 1000
Второй вариант решения - проект Эйлера (1 задача)
Перебираем числа, изменяя счетчик цикла сразу по три: 0… 3… 6… 9… и так далее до 999.
Сразу прибавляем их к результату, потому что все они делятся на три.
Далее изменяем счетчик цикла сразу по пять: 0… 5… 10… 15… и так далее до 999.
Их тоже прибавляем к сумме, потому что все они делятся на пять.
Число 15 делится одновременно и на 3 и на 5, поэтому число 15 и потому кратные ему будут занесены в сумму дважды.
Вычитаем из суммы числа, кратные 15.
Однако скорость вычислений особо не изменилась.
Проект Эйлера (1 задача) - ответ и скорость работы программы
В итоге ответ на 1 задачу проекта Эйлера составил 233168.
Программа работает не просто быстро – мгновенно (ноль миллисекунд).
Я пробовал увеличить объем вычислений на несколько порядков – однако скорость оставалась неизменной. В итоге пришел к выводу, что задача пока что слишком простая.
По традиции хотелось бы выразить глубочайшую признательность Сергею Балакиреву за его титанический труд по созданию бесплатных курсов и в частности, за “Язык программирования C/C++ для начинающих“.
Есть вопросы, господа? Отвечаем спокойно, четко и только по делу))