|
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
|
||||||
Динамический массив, много циклов и простые числа. Как ускорить работу программы ?21.12.2012, 23:13. Показов 5501. Ответов 13
Метки нет (Все метки)
Всем привет.
Задание следующее: Кто нибудь вводит с клавиатуры число n и k, должен создастся массив из чисел от 1 до n, далее каждый элемент массива должен проверится на деление на квадрат простых чисел (*), если делится - сделать этот элемент нулем. Далее нужно посчитать количество q не нулевых элементов и количество h не нулевых элементов с шагом k (**). В конце должно вывести на экран число-результат деления h на q. (*)допустим кто нибудь ввел с клавиатуры 10 и 2 (n=10, k=2), создался массив с содержанием - 1 2 3 4 5 6 7 8 9 10, далее программа должна выявить какие элементы делятся на квадрат простых чисел (без остатка) и обнулить эти элементы, в данном случае массив будет таким: 1 2 3 0 5 6 7 0 0 10 (число 4 делится на квадрат простого числа 2, число 8 делится на квадрат простого числа 2, число 9 делится на квадрат простого числа 3). (**)из примера выше получается что q=7 (семь не нулевых элементов), а h=4. Теперь поясняю про h и k: допустим у нас получился массив 1 2 3 0 5 6 7 0 0 10, начинаем перебирать все элементы от первого и шагом k, получается 1, 3, 5, 7, 0. В результате будет h/q=0.571... Мой вариант:
PS: для тех кто подзабыл - простые числа, это числа которые делятся только на единицу и на самих себя (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43 и т.д.)
0
|
||||||
| 21.12.2012, 23:13 | |
|
Ответы с готовыми решениями:
13
как ускорить работу программы, если элементов много Ускорить работу программы, содержащей много сессий
|
|
Мой лучший друг-отладчик!
|
|
| 21.12.2012, 23:49 | |
|
Ну, можно цикл загона значений в массив и вывод массива обьеденить в 1 цикл - зачем лишний раз пробегать по массиву.
Потом ещё надо удалить из памяти динамический массив.
0
|
|
|
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
|
||||||
| 21.12.2012, 23:56 [ТС] | ||||||
|
ZaMaZaN4iK, точно, забыл удалить динамический массив! counter нужен для следующего: что бы проверить простое ли число или нет, нужно делить это число на все числа от 1 до самого числа и если оно делилось всего 2 раза (counter==2, на единицу и на само себя), значит оно простое. В начале проверки каждого нового простого числа этот счетчик нужно обнулить.
Придумал! Можно попробовать сделать проверку простого числа не до самого числа, а до корня из него. Добавлено через 2 минуты Новая, улучшенная версия: Добавлено через 1 минуту
Интересуют реально действенные способы ускорения работы программы.
0
|
||||||
|
Мой лучший друг-отладчик!
|
|
| 21.12.2012, 23:57 | |
|
я тут пару циклов поубирал
0
|
|
|
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
|
|
| 21.12.2012, 23:58 [ТС] | |
|
Исправил. Есть еще какие нибудь идеи ?
0
|
|
|
Мой лучший друг-отладчик!
|
|
| 22.12.2012, 00:01 | |
|
слушайте, а может надо воспользоватся решетом Аткина для нахождения простых чисел от 1 до n, загонять их в массив.А потом пробегатся по массиву и сравнивать - если совпало - делаем нужные действия
0
|
|
|
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
|
|
| 22.12.2012, 00:03 [ТС] | |
|
Знаю другое решето - Эратосфена. Сейчас попробую что нибудь придумать, но придется все переписывать заново.
0
|
|
|
Мой лучший друг-отладчик!
|
||||||
| 22.12.2012, 00:05 | ||||||
|
решето Эратосфена уступает по быстродействию решету Аткина.на cybern.ru есть реализация решета.Вот она:
0
|
||||||
|
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
|
|
| 22.12.2012, 00:06 [ТС] | |
|
Спасибо! Попробую разобраться.
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
|
||
| 22.12.2012, 00:10 | ||
|
проверять только до корня из z если есть делитель больше корня значит есть делитель меньше корня поищи здесь постоянно возникают темы про простое число а для чисел n=10000 можно рассчитать таблицу простых чисел( а лучше сразу квадратов) в начале программы или набить вручную
0
|
||
|
Мой лучший друг-отладчик!
|
||||||
| 22.12.2012, 00:14 | ||||||
|
вот вроде неплохой вариант(относительно быстро работает, без решет)
ValeryS, вот эта идея мне сразу и закралась в голову - расчитать таблицу простых чисел до нужного числа сразу при помощи готового быстродействующего алгоритма(Аткина)
1
|
||||||
|
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
|
|
| 22.12.2012, 00:22 [ТС] | |
|
ZaMaZaN4iK, Спасибо за поправки.
Есть вопрос: sqrt((float)z) знаю что нужно писать так, но не очень понимаю что здесь происходит. В VC 6.0 я просто писал sqrt(n), в новых версиях так делать нельзя.
0
|
|
|
Мой лучший друг-отладчик!
|
|
| 22.12.2012, 00:33 | |
|
просто функция sqrt принимает переменные дробно типа(double, float, long double), а z у нас целого типа - компилятор ругается.А строкой float(z) мы запихиваем в функцию sqrt() переменную z типа float, но при этом тип самой переменной z не менятеся
0
|
|
|
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
|
|
| 22.12.2012, 00:34 [ТС] | |
|
Всем спасибо за помощь! Все таки не буду переделывать работу, с внесенными поправками даже при n=сто_тысяч программа выполняется относительно быстро.
0
|
|
| 22.12.2012, 00:34 | |
|
Помогаю со студенческими работами здесь
14
Как ускорить работу программы Дан динамический массив.Нужно удалить из него все простые числа и добавить оставшееся в новый массив Подскажите пожалуйста как ускорить работу программы! Подскажите, как можно ускорить работу программы Ускорить работу excel, когда в ячейках много пользовательских функций на VBA Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|