Написать программу которая определяет простое число или нет паскаль

Задача: найти все простые числа, не превышающие заданного. Ниже код. Не могли бы вы проверить нет ли там ошибки. Я не совсем уверен что он работает корректно. Буду благодарен.

Program Lab_4; var i, n, range : integer; Flag : boolean; Begin i := 0; n := 0; write(‘Введите диапазон: ‘); read(range); while i < range do Begin Flag := True; n := 0; i := i + 1; while n < i — 1 do Begin n := n + 1; if ((i mod n = 0) and (n >2)) or ((i mod 2 = 0) and (i <> 2)) then Flag := False; end; if Flag then writeln(i, ‘ — Простое число!’); end; end.

задан 13 мар 2017 в 16:18

Pavel Durmanov Pavel Durmanov

5,658 3 золотых знака 21 серебряный знак 44 бронзовых знака

Иногда бывает гораздо проще код просто переписать. Тогда повысится его читабельность.

Зачем Вы используете цикл while когда здесь нужен for , я не понял. Ну и как правильно заметили, проверять делимость нужно не до самого числа, а до его квадратного корня.

program Lab_4; var i, n, range : integer; Flag : boolean; begin write(‘Введите диапазон: ‘); read(range); for i := 2 to range do begin Flag := True; for n := 2 to Trunc(Sqrt(i)) do begin Flag := i mod n <> 0; if not Flag then break; end; if Flag then writeln(i, ‘ — Простое число!’); end; end.

ответ дан 13 мар 2017 в 16:44

Проверка простоты числа перебором делителей. Решение задачи на Python

Anton Shchyrov Anton Shchyrov

32.9k 2 золотых знака 29 серебряных знаков 59 бронзовых знаков

Вот, посмотрите. Что-то вроде такого должно быть.

program Lab_4; var i, n, range: integer; Flag: boolean; begin i := 1; n := 0; write(‘Введите диапазон: ‘); read(range); while i < range do begin Flag := True; n := 1; i := i + 1; if i <>2 then while n

ответ дан 13 мар 2017 в 16:42

Кирилл Малышев Кирилл Малышев

10.8k 1 золотой знак 18 серебряных знаков 34 бронзовых знака

Вы можете проверить свою программу на наличие ошибок в автоматизированной системе. Например, здесь.
Правда, ввод/вывод программы понадобится адаптировать для тестирующей системы, но это просто.

ответ дан 13 мар 2017 в 16:45

Можно воспользоваться идеями Сундарама, суть которых проста и логична.

  1. Просеивать только нечётные числа. Т.е. элемент решета a[m] должен содержать число m и соответствовать числу 2m+1 .
  2. Исключить из массива все числа вида i+j+2ij, поскольку 2(i+j+2ij)+1 = (2i+1)(2j+1) .
    Этого достаточно, поскольку все составные нечётные числа являются произведением нечётных чисел.
  3. Границы по меньшему индексу i определяются условием (2i+1) 2 ∈ [3, 2M+1], где M — размерность массива a .
    Т.е. i ∈ [1, sqrt(2M+1) / 2 -1 ]
  4. Границы по большему индексу j определяются условием i+j+2ij ∈ [1, M].
    Т.е. j ∈ [1, (M-i) / (2i+1)].
  5. Перебор по i и j проводится с шагом 1.
  6. Значения m , полученные в результате отбора, следует пересчитать в простые числа по формуле p=2m+1.

ответ дан 17 мар 2017 в 0:51

Данное решение может быть и длинное, но работает
UPD: обновлено по просьбе aleksandr barakin

Задачи JS: Как найти простое число + Как найти все простые числа до N | Перебор и Решето Эратосфена


program stack; function simple(x:int64):boolean; begin if((x=2)or(x=3)or(x=5)or(x=7)or((x mod 2<>0)and(x mod 3<>0)and(x mod 5<>0)and(x mod 7<>0))) then simple:=true else simple:=false; end; var i,n:int64; begin Write(‘N = ‘); ReadLn(n); for i:=1 to n do if(simple(i))then WriteLn(i,’ — Простое число’); end.

ответ дан 14 апр 2022 в 13:35

Простые числа – это натуральные числа, большие единицы, которые имеют только два делителя: единицу и само это число.

Примеры простых чисел: 2 , 3, 5, 7, 11, 13…

(Единица не является простым числом!)

Существует множество задач, связанных с простыми числами, и хотя формулируются они достаточно просто, решить их бывает очень трудно. Некоторые свойства простых чисел еще не открыты. Это побудило немецкого математика Германа Вейля (Wayl, 1885-1955) так охарактеризовать простые числа: «Простые числа – это такие существа, которые всегда склонны прятаться от исследователя».

Во все времена люди хотели найти как можно большее простое число. Пока люди считали только при помощи карандаша и бумаги, им нечасто удавалось обнаружить новые простые числа. До 1952 г. самое большое известное простое число состояло из 39 цифр. Теперь поиском все больших простых чисел занимаются компьютеры. Это может представлять интерес для любителей рекордов.

Читайте также:
Цель задачи программы развитие здравоохранения

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

Задача 1. Определение простого числа.

Составить программу, которая будет проверять, является ли введенное число простым.

Самый простой путь решения этой задачи – проверить, имеет ли данное число n (n >= 2) делители в интервале [2; n-1]. Если делители есть, число n – составное, если – нет, то – простое. При реализации алгоритма разумно делать проверку на четность введенного числа, поскольку все четные числа делятся на 2 и являются составными числами, то, очевидно, что нет необходимости искать делители для этих чисел. Логическая переменная flag в программе выступает в роли “флаговой” переменной и повышает наглядность программы, так, если flag = true, то n –простое число; если у числа n есть делители, то “флаг выключаем” с помощью оператора присваивания flag:= false, таким образом, если flag = false, то n – составное число.

var n,i: longint; flag: boolean; begin writeln(‘vvod n’); read(n); if n = 2 then flag := true else if not odd (n) then flag := false else begin flag := true; for i := 2 to n-1 do if n mod i = 0 then flag := false end; if flag then writeln(‘Yes’) else writeln(‘No’); readln; end.

Задача 2. Нахождение простых чисел в заданном интервале.

Составить программу, которая напечатает все простые числа в заданном интервале [2, m], для m>3 и подсчитает их количество.

Для реализации данного алгоритма необходимо проверить каждое число, находящееся в данном интервале, — простое оно или нет. Однако для этого машине пришлось бы потратить много времени. Поэтому подумаем, каким образом можно оптимизировать алгоритм, описанный в задаче 1, применительно к задаче 2?

Будем использовать следующие приемы оптимизации алгоритма:

  1. рассматривать только нечетные числа;
  2. использовать свойство: наименьшее число, на которое делится натуральное число n, не превышает целой части квадратного корня из числа n;
  3. прерывать работу цикла, реализующего поиск делителей числа, при нахождении первого же делителя с помощью процедуры Break, которая реализует немедленный выход из цикла и передает управление оператору, стоящему сразу за оператором цикла.

Как правило, учащиеся сами догадываются о приемах №1 и №3, но не всегда знают, как реализовать в программе досрочное завершение цикла, прием же №2 для них не очевиден, поэтому, возможно, учителю следует остановиться на нем более подробно или же привести полное доказательство этого утверждения.

Счетчик чисел будет находиться в переменной k. Когда очередное простое число найдено, он увеличивается на 1. Простые числа выводятся по 10 в строке, как только значение счетчика становится кратным 10, курсор переводится на новую строку.

var m,n,i,k: longint; flag: boolean; begin writeln(‘vvod m>3’); readln(m); write(‘ 2 3’); n:=3; k := 2; n := n+2; while n

Близнецы

Два нечетных простых числа, разнящихся на два, называются близнецами. Близнецами являются, например, числа 5 и 7, 11 и 13, 17 и 19 и т.д. В начале натурального ряда такие пары чисел встречаются достаточно часто, но, по мере того как мы продвигаемся в область больших чисел, их становится все меньше и меньше.

Известно, что в первой сотне имеется целых 8 близнецов, дальше они расположены очень неравномерно, их можно обнаружить все реже и реже, гораздо реже, нежели сами простые числа. До сих пор неясно, конечно ли число близнецов. Более того, еще не найден способ, посредством которого можно было бы разрешить эту проблему.

Задача 3. Поиск пар чисел близнецов.

Написать программу, которая будет находить все числа близнецы в интервале [2; 1000] и подсчитывать количество пар чисел близнецов.

Фактически будем использовать алгоритм и программу Задачи 2. В этом алгоритме нужно использовать дополнительные переменные для хранения двух “последних” простых чисел и проверять условие наличия близнецов – их разность должна быть равна двум.

var m,n,n1,n2,i,k: longint; flag: boolean; begin m :=1000; n1 := 2; n2 := 3; n := n2+2; k:=0; while n

Задача 4. Нахождение простых чисел в заданном интервале с выводом в выходной файл.

Реализовать алгоритм задачи 2 с выводом простых чисел в выходной файл по 10 в строке. Последняя строка файла должна содержать информацию о количестве простых чисел в заданном интервале.

var m,n,i,k: longint; flag: boolean; f:text; begin assign(f,’output.txt’); rewrite(f); writeln(‘vvod m > 3′); readln(m); write(f,’ 2 3′); n:=3; k := 2; n := n+2; while n

Задача 5. Приемы оптимизации алгоритма задачи 4.

Оптимизировать алгоритм задачи 4 следующим образом: найденные простые числа записывать в файл, делимость очередного кандидата проверять только на числа из этого файла.

Читайте также:
В какой программе вырезать картинку

Словесное описание алгоритма:

  1. Вводим правую границу диапазона – m;
  2. Записываем двойку и тройку в файл;
  3. Пока очередное нечетное число i
  4. проверять очередное нечетное число на наличие делителей из данного файла;
  5. если есть делители, рассматривать очередное нечетное число, если нет — производить дозапись в “хвост” файла.

label n1; var m,i,j,k,q : longint; f : text; begin assign(f,’output.txt’); rewrite(f); Writeln(‘vvod m’); readln(m); k := 0; if m >= 2 then begin write(f,’ ‘:6,’2′,’ ‘:6); k:=k+1 end; if m >= 3 then begin write(f,’3′); k:=k+1 end; close(f); i:=5; while i for j:=1 to k do begin read(f,q); if (q*q>i) then break; if (i mod q=0) then goto n1 end; close(f); append(f); k:=k+1; Write (f,i:7); if k mod 10 = 0 then writeln(f); close(f); n1: i:=i+2 end; append(f); writeln(f); writeln(f,’ kol -vo = ‘,k); close(f) end.

Эратосфеново решето

Греческий математик Эратосфен (275-194 гг. до н.э.) предложил интересный метод нахождения простых чисел в интервале [2; n]. Он написал на папирусе, натянутом на рамку, все числа от 2 до 10000 и прокалывал составные числа. Папирус стал, как решето, которое “просеивает” составные числа, а простые оставляет. Поэтому такой метод называется Эратосфеновым решетом. Рассмотрим подробнее этот метод.

Пусть написаны числа от 2 до n:

Первое неперечеркнутое число в строке является простым. Таким образом, 2 – простое число. Начинаем “просеивание” с него, перечеркивая все числа, которые делятся на 2:

Далее берем следующее по порядку неперечеркнутое число и перечеркиваем все числа, кратные ему и т. д. Таким образом, мы перечеркнем все составные числа, а простые останутся неперечеркнутыми:

Все числа указанного интервала можно рассматривать как множество и в дальнейшем из этого множества будем исключать (отсеивать) все составные числа.

Задача 6. Нахождение простых чисел с помощью решета Эратосфена.

Реализовать алгоритм решета Эратосфена с помощью организации работы с множествами.

Словесное описание алгоритма:

  1. Выделим из первых n натуральных чисел все простые числа (решето Эратосфена).
  2. Вначале формируем множество BeginSet, состоящее из всех целых чисел в диапазоне от 2 до n. Множество PrimerSet будет содержать искомые простые числа.
  3. Затем циклически повторим действия:
  1. взять из BeginSet первое входящее в него число next и поместить его в PrimerSet;
  2. удалить из BeginSet число next и все другие числа, кратные ему, т. е. 2* next, 3* next и т. д.

Цикл повторяется до тех пор, пока множество BeginSet не станет пустым. Программу нельзя использовать для произвольного n, т. к. в любом множестве не может быть больше 256 элементов. (Для расширения интервала простых чисел можно разбить одно большое множество на несколько маленьких, т. е. представить большое множество в виде массива малых множеств. Этот случай рассматривать не будем. Можно предложить наиболее заинтересованным учащимся самостоятельно рассмотреть этот вариант.)

const n = 255; type SetOfNumber = set of 1..n; var n1, next, i: word; BeginSet, PrimerSet: SetOfNumber; begin BeginSet := [2..n]; PrimerSet :=[2]; next := 2; while BeginSet <> [] do begin n1 := next; while n1 end; Include(PrimerSet,next); repeat Inc(next); until (next in BeginSet) or (next > n) end; for i := 1 to n do if i in PrimerSet then write(i:5); readln end.

Литература:

  1. Е.В. Андреева Методика обучения основам программирования на уроках информатики. Лекции 1-8. – М.: Педагогический университет «Первое сентября», 2006.
  2. В.А. Дагене, Г.К. Григас, А.Ф. Аугутис 100 задач по программированию. – М.: Просвещение, 1993. — 255 с.
  3. В.В. Фаронов Турбо Паскаль 7.0. Начальный курс. Учебное пособие. – М.: «Нолидж», 1999. — 616 с.

Раздел:
Задачи /
Простейшие /

Как определить простое число

Условие задачи 2.30

Задача 2.30
Дан одномерный массив А, состоящий из натуральных чисел. Вывести на экран количество простых чисел в массиве.

Для начала напомню, что такое простые числа.

Простое число — это натуральное число, которое имеет ровно два различных натуральных делителя — единицу и самого себя.

То есть если число делится без остатка только на 1 и на самого себя, то такое число является простым.

Например, простыми числами являются 2, 3, 5 и т.п.

А вот 4 уже не является простым, так как делится без остатка не только на 1 и 4, но ещё и на 2.

Если вы подзабыли, что такое натуральное число, то см. здесь.

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

Как определить простое число в Паскале

Алгоритм решения с подробным разбором приведу на Паскале. Решение на С++ можете посмотреть в примере программы на С++.

Читайте также:
Программа для планшета для обновления

ВАЖНО!
На этом многие могут ошибиться. В определении сказано, что простое число имеет
ровно два различных делителя. Следовательно, число 1 не является простым (также не является простым, так как ноль можно делить на любые числа).

Проверять, является ли число простым, будем с помощью функции, которую сами и создадим. Эта функция будет возвращать TRUE, если число простое.

В функции сначала будем проверять, не является ли число меньше двух. Если да, то это уже не простое число. Если же число равно 2 или 3, то оно является однозначно простым и делать какие-то дополнительные проверки не требуется.

А вот если число N будет больше трёх, то в этом случае в цикле будем перебирать все возможные делители, начиная от 2 до (N-1). Если на какой-то делитель число N делится без остатка, значит, это тоже не простое число. В этом случае мы прерываем цикл (потому что проверять дальше нет смысла), а функция возвращает FALSE.

Проверять, делится ли число на самоё себя нет смысла (поэтому цикл длится только до N-1).

Саму функцию здесь приводить не буду — посмотрите её в примерах программ.

Решение задачи 2.30 на Паскале

program mytask; //**************************************************************** // КОНСТАНТЫ //**************************************************************** const COUNT = 100; //Количество элементов в массиве //**************************************************************** // ФУНКЦИИ И ПРОЦЕДУРЫ //**************************************************************** //**************************************************************** // Проверяет, является ли число простым // ВХОД : N — число // ВЫХОД : TRUE — число N простое, FALSE — не простое //**************************************************************** function IsPrimeNumber(N : WORD) : boolean; var i : WORD; begin Result := TRUE; case N of 0..3 : begin if N < 2 then Result := FALSE; //Не простое число Exit; end; end; for i := 2 to (N-1) do if (N mod i) = 0 then //Не простое число begin Result := FALSE; Break; end; end; var i : WORD; X : WORD = 0; A : array[1..COUNT] of WORD; //**************************************************************** // ОСНОВНАЯ ПРОГРАММА //**************************************************************** begin //Заполнить массив числами for i := 1 to COUNT do A[i] := i; //Подсчитать и выбрать простые числа из массива for i := 1 to COUNT do if IsPrimeNumber(A[i]) then begin Inc(X); Write(A[i], ‘ ‘); end; WriteLn(#10#13’Number of Prime numbers = ‘, X); WriteLn(‘The end. Press ENTER. ‘); ReadLn; end.

Решение задачи 2.30 на С++

#include #include using namespace std; //**************************************************************** // КОНСТАНТЫ //**************************************************************** const int COUNT = 100; //Количество элементов в массиве //**************************************************************** // ФУНКЦИИ И ПРОЦЕДУРЫ //**************************************************************** //**************************************************************** // Проверяет, является ли число простым // ВХОД : N — число // ВЫХОД : TRUE — число N простое, FALSE — не простое //**************************************************************** bool IsPrimeNumber(int N) < bool Res = true; switch (N) < case 0 : Res = false; break; case 1 : Res = false; break; case 2 : Res = true; break; case 3 : Res = true; break; default : for (int i = 2; i < N; i++) if (0 == (N % i)) //Не простое число < Res = false; break; >> return(Res); > //**************************************************************** // ОСНОВНАЯ ПРОГРАММА //**************************************************************** int main(int argc, char *argv[]) < int A[COUNT]; int X = 0; //Заполнить массив числами for (int i = 0; i < COUNT; i++) A[i] = i; //Подсчитать и выбрать простые числа из массива for (int i = 0; i < COUNT; i++) if (IsPrimeNumber(A[i])) < X++; cout ; cout

Как определить простое число

Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки…
Подробнее…

Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение — ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации.
Подробнее…

Источник: domrf-lk.ru

Написать программу которая определяет простое число или нет паскаль

Школьнику.com

Оцени ответ

  • Алгебра
  • Математика
  • Русский язык
  • Українська мова
  • Информатика
  • Геометрия
  • Химия
  • Физика
  • Экономика
  • Право
  • Английский язык
  • География
  • Биология
  • Другие предметы
  • Обществознание
  • История
  • Литература
  • Українська література
  • Беларуская мова
  • Қазақ тiлi

Показать ещё

Источник: www.shkolniku.com

Написать программу которая определяет простое число или нет паскаль

напишите программу на языке pascal
дано: натуральное число -n
выяснить с помощью цикла repeat является ли оно простым (то есть делится на 1 и на само себя)

5 (1 оценка)

contrlc

contrlc 6 лет назад
Светило науки — 315 ответов — 1315 раз оказано помощи

var
i, n: integer;

begin
i := 1;
read(n);
repeat
i := i + 1;
if(n mod i = 0) and (n <> i) or (n = 1) then
begin
write(‘Число ‘, n, ‘ не является простым’);
exit;
end;
until i = trunc(sqrt(n)) + 1;
write(‘Число ‘, n, ‘ является простым’);
end.

Источник: vashurok.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru