Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Подпрограммы простые числа

Автор: grandzeft 31.10.2017 16:38

Привет всем на форуме. Задали одну задачку, которую нужно решить с помощью подпрограммы БЕЗ использования МАССИВОВ: Вывести на экран пары ближайших друг к другу простых чисел из заданного интервала. Например из интервала от 6 до 13 должно выводиться 11 и 13 , НО НЕ 7 и 11. Пожалуйста помогите, очень долго ломаю голову

Автор: Федосеев Павел 1.11.2017 1:13

Так volvo же её для вас решил!.. Что не устроило в его решении?

Покажите простую реализацию проверки числа на простоту в виде функции IsPrime.

Автор: grandzeft 3.11.2017 23:41

С проверкой на простое число все ясно. Сейчас пытаюсь сделать следующее:
есть два параметра A и B предположим, которые первоначально оба равны -1 и какое-то число C из введенного отрезка. C перекидывается в B, а B в А. Проверяются на простые и если после "перекидываний" пара простых, то нужна их разница, ну и вывожу эту пару с наименьшей разницей.

Добавлено через 18 мин.
В принципе осталось выводить пару с наименьшей разницей

function isPrime(X: LongInt): boolean;
var i: integer;
Begin
isPrime:=false;
if x<1 then Exit;
if not odd(x) and (x<>2)
then exit;
i:=3;
while i <= sqrt(x) do
begin
if x mod i = 0 then Exit;
inc(i);
end;
isPrime:=true;
End;

var i, a, b, m, n : LongInt;
begin
Readln(a,b);
WriteLn('Простые числа в диапазоне от ',a,' до ',b);
m:=-1;
n:=-1;
for i:=a to b do
if isPrime(i) then
begin
m:=n;
n:=i;
if (isPrime(m)) and (isPrime(n)) then writeln(m, '-', n, ' ', 'Разница:', n-m);
end;

end.

Автор: grandzeft 4.11.2017 2:45

Блин разницу смог "запомнить", а как пару соответственно этой разнице вывести не могу допереть. подскажите?

function isPrime(X: LongInt): boolean;
var i: integer;
Begin
isPrime:=false;
if x<1 then Exit;
if not odd(x) and (x<>2) { проверяем на чётность }
then exit;
i:=3;
while i <= sqrt(x) do { проверяем только нечётные }
begin
if x mod i = 0 then Exit;
inc(i);
end;
isPrime:=true;
End;

var i, a, b, m, n,min : LongInt;
P:boolean;
begin
min:=Maxint;
Readln(a,b);
WriteLn('Ближайшая друг к другу пара простых чисел в диапазоне от ',a,' до ',b,':');
m:=-1;
n:=-1;
for i:=a to b do
if isPrime(i) then
begin
m:=n;
n:=i;
if (isPrime(m)=true) and (isPrime(n)=true) then

if (n-m<min) and (m<>-1) then min:=n-m ;
else




end;
if n-m=min then writeln(m, '-', n, ' ' 'Разница:', min)
end.

Автор: Федосеев Павел 5.11.2017 23:52

Думаю, что должно быть два цикла:
1. Поиск первого простого числа не меньшего числа a.
2. Поиск следующих чисел.