не могли бы вы помочь с объяснением программы.
Дано некоторое натуральное число 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.
{функция поиска простого числа}
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.
Сергей Мухамедчин
Работает немного не корректно, при вводе 3, должно вывести по сути 2, но выводит 5, но все равно спасибо за помощь, стало понятней)
Самое бездарное решение которое я видел)
Сергей Мухамедчин
не могли бы объяснить почему?
Сергей Мухамедчин
но судя по вашим ответам не за бесплатно я полагаю?)
Похожие вопросы
- Программа на паскале! Помогите(бесплатно)
- Нужно написать программы в Паскале! Массивы! Срочно! Помогите!
- Нужно написать программу на паскале
- Написать программу в Паскале для построения графика функций. К программе желательно составить алгоритм.
- Программа в Паскале
- Помогите составить программу на паскале!
- Время работы программы в Паскаль
- Объясните как работает программа в паскаль!!!
- помогите с программами в паскале
- найти все семизначные числа, которые делятся на 15 и записываются только цифрами 0 и 1. Составить программу на паскале