|
0 / 0 / 0
Регистрация: 25.12.2021
Сообщений: 39
|
||||||
Вывести количество простых чисел на интервале12.03.2022, 16:37. Показов 1423. Ответов 9
Метки нет (Все метки)
0
|
||||||
| 12.03.2022, 16:37 | |
|
Ответы с готовыми решениями:
9
Вывести количество составных чисел, у которых количество простых собственных делителей больше трех Цикл: Вывести количество особых чисел в интервале от p do n Найти количество почти простых чисел в заданном интервале натуральных чисел. |
|
Модератор
10451 / 5742 / 3409
Регистрация: 17.08.2012
Сообщений: 17,476
|
|
| 13.03.2022, 00:24 | |
|
И что не так с этой далеко не оптимальной программой?
0
|
|
|
0 / 0 / 0
Регистрация: 25.12.2021
Сообщений: 39
|
|
| 13.03.2022, 19:50 [ТС] | |
|
Не проходит по времени
Добавлено через 23 минуты К тому же не везде верный ответ выводит
0
|
|
|
Модератор
10451 / 5742 / 3409
Регистрация: 17.08.2012
Сообщений: 17,476
|
||||||||||||
| 14.03.2022, 01:14 | ||||||||||||
|
Понятно. А что, сразу написать религия не позволила? Правило форума:
Естественно, Ваша программа не проходит по времени, поскольку до жути не оптимальная. Хуже, чем у Вас, это проверять все делители для каждого числа, от 1 до самого числа. А ведь достаточно найти только один делитель, чтобы понять, что число составное. Ваша программа не проходит все тесты потому, что она числа, меньшие 2, ошибочно считает простыми. Известно, что натуральное число может быть простым тогда и только тогда, когда оно равно 2 или 3, или его можно выразить формулой n=6k±1, где k - натуральное число. Среди других чисел простых нет. Программу сразу можно ускорить в три раза, поскольку нужно будет проверять только два числа из шести. Отсеивание чисел, делящихся на 2 или на 3, дополнительно ускорит программу. Каждый делитель числа имеет пару. Если число n делится на t, то оно по понятной причине делится и на (n div t). Таким образом, при проверке простоты числа достаточно искать делители от 2 до корня квадратного из числа, поскольку меньший делитель из пары не может превосходить корень квадратный из числа. Это куда быстрее, чем перебирать делители до n div 2. Если делители в указанном диапазоне не найдены, то число простое. Лучше всего искать только те делители, которые сами являются простыми числами. В этом случае придётся заранее найти все возможные простые делители (чтобы не искать их всякий раз заново), но, так как верхняя граница диапазона не определена заранее, и может быть очень большой, то и размер массива простых делителей получается также неопределённым и большим. Медленнее, но проще: можно искать не простые делители, а делители, которые могут быть простыми, то есть, по тому же принципу 2, 3, 6k±1. Предлагаю в диапазоне [a; b], где a ≤ b, проверять простоту только чисел вида 6k±1, которые не делятся на 2 или на 3. Делители каждого числа будем искать до корня из числа, набор делителей - 2, 3, 6k±1. Поиск делителей будем прерывать при нахождении первого попавшегося делителя (составное число), или если предполагаемый делитель превысил корень из числа (простое число). Числа вида 6k±1 будем искать так: находим первое такое число, а потом прибавляем к нему то 2, то 4. Для сдачи на проверочный сайт:
Разбирайтесь. Если нужно ещё быстрее, то укажите максимально возможное b, попробуем искать все возможные делители заранее. Добавлено через 23 минуты На всякий случай, медленнее, но проще (но всё равно значительно быстрее, чем у Вас), на простоту проверяются все числа, не делящиеся на 2, с помощью перебора нечётных делителей от 3 до корня из числа:
1
|
||||||||||||
|
0 / 0 / 0
Регистрация: 25.12.2021
Сообщений: 39
|
|
| 14.03.2022, 07:28 [ТС] | |
|
Максимальный b 10^12
0
|
|
|
Модератор
10451 / 5742 / 3409
Регистрация: 17.08.2012
Сообщений: 17,476
|
||||||
| 14.03.2022, 23:00 | ||||||
Сообщение было отмечено Overlord Cows как решение
Решение
bormant, это я дооптимизировался. Не помню уже, как было до оптимизации, попытаюсь восстановить... Так, кажется:
Хорошо хоть 1012, а не 10112, но, всё равно, получается непросто. При такой верхней границе спасёт только решето Аткина, быстрее него ничего в мире нет. Если честно, то всё же есть, может быть, даже чуть быстрее, но со значительно большими размерами требуемой памяти. Материалы по теме (чтобы потом не искать): A. O. L. Atkin and D. J. Bernstein - Prime sieves using binary quadratic forms Wikipedia - Sieve of Atkin Википедия - Решето Аткина Хабр - Еще раз о поиске простых чисел Wikipedia - Wheel factorization Wikipedia - Square-free integer Ещё раз уточните задание: - в каких пределах могут быть обе границы диапазона, и a, и b; - какой лимит по времени; - какой лимит по памяти; - какой диалект паскаля.
0
|
||||||
|
0 / 0 / 0
Регистрация: 25.12.2021
Сообщений: 39
|
|
| 14.03.2022, 23:22 [ТС] | |
|
Ограничения 2<=a<=b<=10^12
Лимит по времени: 2 сек Лимит по памяти: 65536 кбайт PascalABC.NET Добавлено через 8 минут В общем, мне сказали что я дурачок, что выбрал эту задачу, так как она мега сложная, можете не напрягаться, решить на паскале ее практически нереально, простите (
0
|
|
|
Модератор
10451 / 5742 / 3409
Регистрация: 17.08.2012
Сообщений: 17,476
|
|
| 15.03.2022, 00:27 | |
|
Скажете тоже, "нереально"... Не такая уж эта задача и мегасложная. Считать будет только сравнительно долго, и память жрать, как крокодил.
Сложность здесь не в написании программы. Вложиться в лимит по времени и в лимит по памяти, скорее всего, не удастся на любом языке программирования, вот в чём засада: для интервала [2; 1012] при использовании быстрейшего в мире алгоритма поиска простых чисел на паскале или C++ по времени навскидку получится секунд пять, если компьютер на сервере не из прошлого века, а по памяти при приемлемом времени получается порядка sqrt(1012)=1000000 байт. Если использовать BitPacking, то можно обойтись 125000 байтами, но программа будет чуть медленнее. Не напишешь - не узнаешь. А попробую написать. Конечно, на Pascal ABC.NET с его JIT-компилятором побыстрее будет, вот только на проверочных сайтах частенько пишут "Pascal ABC.NET", а на самом деле там крутится не самый новый Free Pascal на каком-нибудь Ubuntu. Адрес проверочного сайта приведите.
1
|
|
|
Модератор
|
||
| 15.03.2022, 08:57 | ||
|
Против лома нет приема ![]() Добавлено через 8 минут Те, что не влезли в LongWord, можно хранить как дополнение к Base (Base+BigPrime[i]), что позволит не увеличивать вдвое необходимую память. Добавлено через 33 минуты Еще про возможный вариант хранения таблицы простых: https://habr.com/ru/post/417753/
0
|
||
| 15.03.2022, 08:57 | |
|
Помогаю со студенческими работами здесь
10
Подсчитать количество простых чисел в интервале от А до В Найти количество простых чисел в интервале Количество четных простых чисел в интервале [A, B]
Подсчитать количество простых чисел в произвольном интервале Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|