Подскажите алгоритм - Free Pascal
Формулировка задачи:
Как из целочисленного массива выбирать по одному элементу ,чтобы проверить простой ли он(без использования подпрограмм). Пробовал вложенными циклами, но получился бред.
Может с помощью "Решето́ Эратосфе́на".Прочитал в википедии но ни чего особо не понял.
Решение задачи: «Подскажите алгоритм»
textual
Листинг программы
uses crt;
const nmax=100;
var a:array[1..nmax] of integer;
n,i,j,k,p:byte;
begin
clrscr;
randomize;
repeat
write('Размер массива от 2 до ',nmax,' n=');
readln(n);
until n in [2..nmax];
writeln('Массив');
for i:=1 to n do
begin
a[i]:=1+random(50);
write(a[i]:4)
end;
writeln;
writeln('Простые числа');
{самый простой и не оптимальный вариант}
k:=0;
for i:=1 to n do
if a[i]>1 then{1 не простое}
begin
j:=2;{проверяем делимость начиная с 2}
p:=0;
while (j*j<=a[i])and(p=0) do{пока не больше корня из a[i] и не делится}
if a[i] mod j=0 then p:=1{если делится, дальше не проверяем}
else j:=j+1;{иначе дальше}
if p=0 then {если ни на что не делится}
begin
k:=1;{фиксируем что есть}
write(a[i]:4);{выводим}
end;
end;
if k=0 then write('В массиве нет простых чисел');
readln
end.
Объяснение кода листинга программы
- Объявлены переменные: n, i, j, k, p (byte); a: array[1..nmax] of integer;
- Задается размер массива от 2 до 100;
- Заполняется массив случайными числами от 1 до 50;
- Выводится заполненный массив;
- Находим простые числа в массиве;
- В самом простом и не оптимальном варианте, для каждого числа в массиве проверяется его делимость, начиная с 2;
- Если число делится на какое-то число из диапазона [2..корневая функция из этого числа], то оно не является простым числом;
- Если число не делится ни на одно число из диапазона [2..корневая функция из этого числа], то оно является простым числом;
- Все простые числа выводятся на экран;
- Если в массиве нет простых чисел, выводится сообщение
В массиве нет простых чисел.