Привет всем на форуме. Задали одну задачку, которую нужно решить с помощью подпрограммы БЕЗ использования МАССИВОВ: Вывести на экран пары ближайших друг к другу простых чисел из заданного интервала. Например из интервала от 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. Поиск следующих чисел.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.