![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 08.08.2019
Сообщений: 20
|
![]()
Решить нужно на языке Pascal.
Задача такая: По данному простому числу найти следующее за ним простое. Мои мысли по задаче: пусть мы вводим какое-то m простое По теореме Чебышева между m и 2m обязательно найдется простое число, если m>=2 . Обнулим k:=0 { Будет отвечать за число делителей числа} поэтому можно начать перебор for i:= (m+1) to 2*m do для каждого из i можно начать перебор for j:=1 to 2*m do if i mod j=0 then k:=k+1; Воот и делать проверку до тех пор пока k<>2 Как только k=2 сразу напечатать i, при котором это произошло Алгоритм в непричесанном виде я пробовал все это реализовать, что-то не вышло |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
перебор с проверкой на простоту у Вас неправильно написан
возьмите код отсюда - https://www.programmersforum.ru/show...58&postcount=4 |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 08.08.2019
Сообщений: 20
|
![]()
Сейчас написал, прога определяет простоту, но мне нужно находить простое из промежутка:
Код:
Форматируйте код и используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ Последний раз редактировалось Вадим Мошев; 09.08.2019 в 08:39. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,375
|
![]()
Твой фрагмент определения простоты надо сделать в виде функции, которая возвращает логическое значение, например True - если число простое.
Далее организуете цикл от вашего заданного простого m до 2 * m. В цикле каждое следующее число передаётся в функцию. Если функция вернула True, то печатаешь число и выходишь из цикла по Break. 1. При написании функции нужно вместо вывода сообщений вставить оператор return, предварительно присвоив функции логическое значение. Код:
Как-то так, ...
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
т.е. по моей ссылке Вы не ходили.
![]() ну, дело ваше. ну так очевидно же: https://ideone.com/hUCbBZ Код:
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 08.08.2019
Сообщений: 20
|
![]()
А как сделать без введения функции, я еще не изучал их?В моем расположении максимум: все виды циклов.
|
![]() |
![]() |
![]() |
#7 | ||
Пользователь
Регистрация: 08.08.2019
Сообщений: 20
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,375
|
![]()
Ну так и организуй цикл в цикле.
Внешний цикл - перебираем тестируемые значения от m до 2 * m Внутренний цикл - проверяем на простоту. При проверке на простоту при обнаружении делимости сразу завершаем проверку (не подсчитываем делители: k > 0) и переходим к следующему тестируемому числу. Если вышли из цикла, в котором тестируем на простоту и k = 0, то тестировалось простое число. Код:
Как-то так, ...
|
![]() |
![]() |
![]() |
#9 | |
Пользователь
Регистрация: 08.08.2019
Сообщений: 20
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,375
|
![]()
Ну да.
Но проанализируй пост #5 Serge_Bliznykov В предложенной там версии время перебора сокращается за счёт того, что после проверки на чётность проверяются только нечётные делители.
Как-то так, ...
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вводится число и программа должна сказать ПРОСТОЕ оно или нет (Pascal) | diana1995 | Помощь студентам | 8 | 13.05.2013 10:45 |
Простое шифрование | alex.snap | Помощь студентам | 17 | 02.11.2012 06:19 |
k-е простое | daniil123 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 14.12.2011 23:52 |
Простое или нет | Superlotles | Общие вопросы C/C++ | 7 | 13.03.2010 20:30 |