Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 30.10.2017
Сообщений: 33

Следует выбрать эффективный алгоритм (по времени) теста простоты числа

09.11.2017, 06:16. Показов 1434. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Следует выбрать эффективный алгоритм (по времени) теста простоты числа.
На исследование вам дается два алгоритма:
1. Перебор делителей числа (Проверяем все числа от 2 до n-1 делят ли они заданное число
n),
2. Ограниченный перебор делителей числа (Проверяем числа от 2 до делят ли они
заданное число n).
Необходимо:
1. Реализовать данные алгоритмы,
2. Исследовать их и
3. Составить отчет.
Как исследовать алгоритмы? Конечно, перед тем как исследовать алгоритм нужно его
реализовать. Далее, вы должны запустить свои программы как минимум 5 раз для каждого
набора входных данных (в данной не менее 5 раз для N.1, 5 раз для N.2 и 5 раз для N.3, где N –
номер вашего варианта). При каждом запуске вам необходимо измерять, сколько времени
потребуется алгоритму для решения задачи (т.е. у вас будет 5 измерений для N.1, 5 измерений
для N.2 и 5 измерений для N.3, по каждому алгоритму). Далее находите средние арифметические
значения для каждого входного параметра (для N.1, N.2 и N.3) отдельно для первого и второго
алгоритмов. По этим средним значениям вы строите график зависимости времени работы
алгоритма от величины числа (для первого и второго алгоритма отдельно). Изучая эти графики вы
и должны строить ваши выводы и суждения.
Подсказки:
1. Для больших входных данных, например, для 2-го и 3-го наборов, лучше использовать тип
данных long long или __int64.
2. Для измерения времени работы алгоритма использовать функцию clock() (header file –
сtime).
Пример измерения длительности работы цикла:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<stdio.h>
#include<conio.h>
#include<ctime>
void main(){
/*
Определяем переменные, которые будем использовать для измерения времени.
Функция clock() возвращает результат, тип которой clock_t, поэтому
переменные start и end должны иметь такой же тип. Переменные, которые будут
использоваться для вычисления времени работы цикла будут иметь тип double.
*/
clock_t start,end;
double dif_time, time_for_cycle;
//Перед тем как начать вычисления запоминаем во сколько начали мы свои
//вычисления.
start = clock();
for(int i=0;i<1000000000;i++);
//После того как вычисления закончились мы опять запоминаем во сколько они
//закончились
end = clock();
/*
Функция clock() на самом деле возвращает не время, а количество tick
(тиков), которое прошло с начала выполнения программы. Для того чтобы
вычислить сколько секундам или миллисекундам равно измеренное количество
тиков нужно его разделить на константу CLOCKS_PER_SEC, что и делается на
следующих двух строках.
*/
dif_time = end - start;
time_for_cycle = dif_time/CLOCKS_PER_SEC;
//Теперь просто выводим результат измерений на экран
printf("%.10lg sec",time_for_cycle);
getch();
}
Отчет должен включать следующую информацию:
1. Общая информация о работе, т.е. должны быть даны ответы на следующие вопросы: «о
чем эта работа?», «какие алгоритмы были исследованы?».
2. Описание алгоритмов: Здесь вы должны привести словесное описание, блок схемы всех
алгоритмов, которые вы реализовали.
3. Описание тестовых данных, т.е. ответы на следующие вопросы: «Какие тестовые данные
вы использовали?», «Почему именно такие?». И должны привести сами тесты (наборы
данных).
4. Результаты исследований. Здесь вы должны привести результаты ваших измерений.
Обычно сравнивают средние значения показателей нескольких прогонов программ.
Следовательно, нужно запустить программу минимум 5 раз с различными входными
данными одного типа и объема и сравнивать средние арифметические значения.
5. Выводы. Ваши соображения и суждения, основанные на полученных результатах.
6. Исходные коды программ.

Входные данные
1 7358
2 800000019043
3 373865754898010773
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.11.2017, 06:16
Ответы с готовыми решениями:

Предложить эффективный алгоритм умножения числа на дробь в длинной арифметике
Нам дано длинное натуральное число, представленное в виде динамического массива: 1) разряды числа записываются от старшего к младшему;...

Алгоритм теста на простые числа методом перебора делителей
Здравствуйте! Продолжаю изучать Java, на этот раз получил несколько задач, самая нетривиальная из них оказалась следующей: import...

Эффективный алгоритм для задачи
Условия следующие: Даны n различных натуральных чисел и число m. Нужно выяснить, можно ли представить число m в виде произведения...

7
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
09.11.2017, 06:56
Интересная задача, всё разжевано. Что от нас то требуется? Написать программу, вывести графики и отчет составить?
0
0 / 0 / 0
Регистрация: 30.10.2017
Сообщений: 33
09.11.2017, 07:04  [ТС]
Скорее всего да
0
09.11.2017, 07:36

Не по теме:

Цитата Сообщение от erenije Посмотреть сообщение
Скорее всего да
А зарплату на работе можно потом тоже я вместо тебя получать буду?

0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
09.11.2017, 09:53
Цитата Сообщение от Avaddon74 Посмотреть сообщение
Интересная задача, всё разжевано
Только вот непонятно, в чем суть алгоритма 2 (ограниченный перебор) Видимо, не донес чего-то ТС ...
И на первый взгляд видно, что алгоритм 1 - очень плох. Видимо, целью задания и является наглядная демонстрация этого факта.
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
09.11.2017, 13:48
Цитата Сообщение от Байт Посмотреть сообщение
Видимо, не донес чего-то ТС ...
Я так же подумал. Кстати, а какой алгоритм вы бы выбрали? Интересует для общего развития.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
09.11.2017, 14:07
Цитата Сообщение от Avaddon74 Посмотреть сообщение
Кстати, а какой алгоритм вы бы выбрали?
Из тех, что представлены здесь выбирать нечего. Внятно описан всего один.
А так все зависит от того, что именно нужно. Если проверить одно число - самое простое - деление на все k от 2 до k*k <=n.
Если составлять список простых, то решето Эратосфена. Все эти подходы могут быть по разному модифицированы.
Вот тут довольно плодотворное обсуждение
Быстрая проверка натурального числа на простоту
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
09.11.2017, 14:30
Цитата Сообщение от Байт Посмотреть сообщение
Из тех, что представлены здесь выбирать нечего.
Я имел ввиду свои алгориты.
Цитата Сообщение от Байт Посмотреть сообщение
список простых, то решето Эратосфена.
Цитата Сообщение от Байт Посмотреть сообщение
Вот тут довольно плодотворное обсуждение
Быстрая проверка натурального числа на простоту
Спасибо, почитаю на досуге.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.11.2017, 14:30
Помогаю со студенческими работами здесь

Эффективный алгоритм перетасовки элементов массива
Друзья, написал вот такую функцию public static void arrayShuffle(int arr) { int length = arr.length; ...

Эффективный алгоритм поиска значения в столбце
У меня происходит просмотр столбца А, и последовательный поиск каждого значения из этого столбца в столбце Б. Эта процедура (одна строка...

Эффективный алгоритм поиска простых чисел на С++
Хотел написать функцию которая вычисляет простое число или сложное, но оно не вычисляется. Цикл который я добавил в функцию не работает....

Разработать эффективный алгоритм быстрой сортировки
Быстрая сортировка. Разработайте эффективный алгоритм для упорядочивания n элементов таким образом, чтобы все отрицательные элементы...

Алгоритм на проверку простоты суммы двух положительных чисел
Добры день. Передо мной стоит задача написать программу: вводится ряд положительных чисел. Необходимо найти все пары, сумма которых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru