Другие языки программирования и технологии

Объяснение программы в паскале

не могли бы вы помочь с объяснением программы.
Дано некоторое натуральное число X. Найти ближайшее к нему простое число.

Function simp(var x: integer): boolean; {функция поиска простого числа}
var i,j: integer;
priz: boolean;
begin
priz:=true; i:=2;
j:=round(sqrt(x));
repeat
if x=2 then break; {число 2 является простым}
if (x mod i)=0 then
begin
priz:=false;
break;
end;
i:=i+1;
until i>j;
simp:=priz;
end;
{ основная программа }
var x,h,k,l,g: integer;
begin
write('Напишите некоторое простое число ');
readln(x);
h:=x+1;
l:=x-1;
k:=1;
g:=1;
while not simp(h) do
begin
h:=x+k;
inc(k);
end;
while not simp(l) do
begin
l:=x-g;
inc(g);
end;
if g>k
then
writeln('Ближайшее к нему простое число: ',h);
if g<k
then
writeln('Ближайшее к нему простое число: ',l);
if g=k
then
writeln('Ближайшие к нему простые числа: ',l,' и ',h);
end.
Может вот так тебе понравиться, не идеально, но достаточно для сдачи

{функция поиска простого числа}
function simp(var x: integer): boolean;
var
i, j: integer;
priz: boolean;

begin
if x <= 1 then {число точно не простое}
begin
simp := false;
Exit;
end;

if x < 4 then {2,3 - это простые числа, проверим на них}
begin
simp := true;
Exit;
end
else {иначе проверять будем в цикле деления на 2,3 и так далее}
begin
priz := true;
i := 2;
j := round(sqrt(x) ); {ищем до среднего геометрического}

repeat
{если делится нацело, то точно не простое}
if (x mod i) = 0 then
begin
priz := false;
break;
end;
Inc(i); {+1 и получаем следующий делитель}
until i > j; {если делитель больше среднего геометрического то выход из цикла}

simp := priz;
end;
end;

{ основная программа }
var
x, h, k, l, g: integer;
pL, pH : Boolean;

begin
write('Напишите некоторое натуральное число: ');
readln(x);

{если введено четное число}
if x mod 2 = 0 then k := 1 else k := 2;

{верхнее и нижнее число которое будем искать}
h := x + k;
l := x - k;
pL := simp(l);
pH := simp(h);

{делаем цикл поиска пока не нашли и число больше 2}
while not pL and not pH and (l>2) do
begin
{+2 пропуская четные числа которые никогда не простые}
l := l - 2;
h := h + 2;
{проверка на простоту}
pL := simp(l);
pH := simp(h);
end;

if pL then writeln('Ближайшее к нему простое число: ', l)
else if pH then writeln('Ближайшее к нему простое число: ', h)
else if pL and pH then writeln('Ближайшие к нему простые числа: ', l, ' и ', h);

end.
Сергей 8888888
Сергей 8888888
67 857
Лучший ответ
Сергей Мухамедчин Работает немного не корректно, при вводе 3, должно вывести по сути 2, но выводит 5, но все равно спасибо за помощь, стало понятней)
Самое бездарное решение которое я видел)
Ilkin Mustafayev
Ilkin Mustafayev
43 400
Сергей Мухамедчин не могли бы объяснить почему?
Сергей Мухамедчин но судя по вашим ответам не за бесплатно я полагаю?)