Предмет: Информатика,
автор: 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.
Ответы
Автор ответа:
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.
//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.
Автор ответа:
0
Лишние команды при поиске простых чисел. Как только нашли число, на которое делится без остатка, из цикла надо выходить. Нужно заменить строки If i mod b=0 then c:=c+1; нужно заменить на следующие If i mod b=0 then begin c:=c+1; break; end; На порядок уменьшится время проверки числа, простое оно или нет.
Автор ответа:
0
Ах, не натуральные, а простые. Если бы мне дали возможность подредактировать...
Автор ответа:
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.
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.
Автор ответа:
0
Спасибо большое, все получилось с break
Похожие вопросы
Предмет: Беларуская мова,
автор: leguhocu51
Предмет: Литература,
автор: timofey00789
Предмет: Математика,
автор: sasahametova
Предмет: Математика,
автор: neisvvestnia200
Предмет: Обществознание,
автор: ksrw1970