- Требуется разработать консольное приложение, работающее с классом-контейнером простых чисел.
- Три режима поиска простых чисел:
- Поиск простых чисел в диапазоне с верхней границей – задается максимальное значение, до которого рассчитываются и запоминаются простые числа, начиная с 1.
- Поиск определенного количества простых чисел – задается количество простых чисел, начиная с 1, которые требуется рассчитать и запомнить.
- Поиск простых чисел без верхней границы.
- Два режима вывода:
- В файл
- В консоль
- Выбор последовательности специальных простых чисел. Контейнер содержит все найденные простые числа, но печататься (в консоль или файл) должны не все числа, а только те, которые входят в последовательности специальных простых чисел, например, «Суперпростые числа», «Простые числа Софи Жермен». Требуется поддержать минимум 2 специальные последовательности. По умолчанию печатаются все простые числа. Функция для проверки принадлежности простого числа специальной последовательности должна быть реализована в виде Лямбда-функции. Описание последовательностей специальных простых чисел: Википедия.
- Требуется получать статистику: как меняется скорость поиска простых чисел, как растет объем памяти, необходимый для поиска. Эти показатели должны выводится в файл. Для каждого нового расчета пишется своя строка. Формирование статистики включается опцией командной строки, в которой указывается имя файла, в который сохраняется статистика.
- Требуется оптимизировать объем используемой памяти
- Написать конструктор копирования, копирующее присваивание контейнера.
- Написать конструктор перемещения, перемещающее присваивание контейнера.
- Проект должен компилироваться под ОС Linux.
- Проект должен компилироваться с использованием make и g++.
- При написании задания необходимо использовать стандарт C++ 11.
- Код должен быть задокументирован с использованием синтаксиса doxygen.
- Решение фиксируется на github. История коммитов должна отражать процесс разработки.
- Обязательно наличие тестов для интерфейса класса. Тестовое покрытие должно быть максимальным. Использование gtest приветствуется. Тесты должны учитывать необходимое количество сценариев работы с классом. При этом ожидается, что на положительных сценариях класс будет работать, а на отрицательных - давать ожидаемые ошибки, а не вести себя непредсказуемо.
- В процессе работы, программа должна выводить информативные сообщения в консоль.