|
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 38
|
||||||
Динамический массив, много циклов и простые числа. Как ускорить работу программы ?21.12.2012, 23:13. Показов 5435. Ответов 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
|
|
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
||
| 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|