Предмет: Информатика, автор: dasha2468

Помогите, в одном тесте пишет: "Превышено максимальное время".

Задача:
Вывести все простые числа от M до N включительно.

Входные данные
В первой строке находятся разделённые пробелом M и N. 2 <= M <= N <= 1 000 000.

Выходные данные
Вывести числа в порядке возрастания, по одному в строке. Если между M и N включительно нет простых - вывести "Absent".

Сам код:
var i,a,b,c,n,d: longint;
begin
Read(a, n);
For i:=a to n do
begin
For b:=2 to trunc(sqrt(i)) do
If i mod b=0 then c:=c+1;
If c=0 then
begin
writeln(i);
d:=d+1;
end
else
c:=0;
end;
if d=0 then writeln('Absent');
end.

Ответы

Автор ответа: Nobunaga
0
//Прости, но я не понимаю что должен делать код выше, напишу свой.
//Pascal ABC. NET v3.0
var m,n:real;
i:integer;
begin
Read(m,n);
if abs(m-n)<1 then
 begin;
  write('Absent');
  exit;
 end;
for i:=trunc(m)+1 to trunc(n) do
writeln(i);
end.
Автор ответа: srzontmp
0
Лишние команды при поиске простых чисел. Как только нашли число, на которое делится без остатка, из цикла надо выходить.  Нужно заменить строки  If i mod b=0 then c:=c+1;  нужно заменить на следующие  If i mod b=0 then begin c:=c+1; break;  end;  На порядок уменьшится время проверки числа, простое оно или нет.
Автор ответа: Nobunaga
0
Ах, не натуральные, а простые. Если бы мне дали возможность подредактировать...
Автор ответа: Nobunaga
0
var m,n:real;
i,j:integer;
b,bc:boolean;
begin
b:=false;
bc:=false;
Read(m,n);
for i:=trunc(m)+1 to trunc(n) do
 begin;
  for j:=2 to trunc(sqrt(i)) do
   If i mod j=0 then
    begin;
     b:=true;
     break;
     end;
  if b=false then
   begin;
    writeln(i);
     bc:=true;
   end
    else
    b:=false;
  end;
if bc=false then writeln('Absent');  
end.
Автор ответа: dasha2468
0
Спасибо большое, все получилось с break
Похожие вопросы
Предмет: Беларуская мова, автор: leguhocu51
Предмет: Математика, автор: neisvvestnia200
Срочно!!!!Помогите решить две задачи
№1   З міста виїхав мотоцикліст ,а через 0,5 годин навздогін йому вирушив автомобіль,швидкість якого нна 35км/год більша від швидкості мотоцикліста .
Через 1,4 години після свого виїзду автомобіль вже випереджав мотоцикліста 29км.Знайти швидкість мотоцикліста та атомобіля.(Для русских внизу)

Из города выехал мотоциклист, а через 0,5 часов вдогонку ему отправился автомобиль, скорость которого нна 35км/год больше скорости мотоциклиста. Через 1,4 часа после своего выезда автомобиль уже опережал мотоциклиста 29км.Знайты скорость мотоциклиста и атомобиля


№2 Діжка наповнена водою з нею спочатку відлили одну третю всієї води , а потім 30%,що залишилося .Щоб знову наповнити діжку треба 64 літри води .Знайти обєм всієї діжки(в літрах). 

Бочка наполнена водой с ней сначала отлили одну третью всей воды, а затем 30%, что осталось. Чтобы вновь наполнить бочку надо 64 литра воды. Найти объем всей бочки (в литрах).

Помогите пожалуйста!!!!
Помогите пожалуйста!!!!Помогите пожалуйста!!!!Помогите пожалуйста!!!!Помогите пожалуйста!!!!Помогите пожалуйста!!!!Помогите пожалуйста!!!!Помогите пожалуйста!!!!Помогите пожалуйста!!!!Помогите пожалуйста!!!!Помогите пожалуйста!!!!Помогите пожалуйста!!!!Помогите пожалуйста!!!!Помогите пожалуйста!!!!