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

    Задача:
    Вывести все простые числа от 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.

Ответы 5

  • Лишние команды при поиске простых чисел. Как только нашли число, на которое делится без остатка, из цикла надо выходить.  Нужно заменить строки  If i mod b=0 then c:=c+1;  нужно заменить на следующие  If i mod b=0 then begin c:=c+1; break;  end;  На порядок уменьшится время проверки числа, простое оно или нет.
  • Ах, не натуральные, а простые. Если бы мне дали возможность подредактировать...
    • Автор:

      mary jane
    • 6 лет назад
    • 0
  • var m,n:real;i,j:integer;b,bc:boolean;beginb:=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.
  • Спасибо большое, все получилось с break
  • //Прости, но я не понимаю что должен делать код выше, напишу свой.//Pascal ABC. NET v3.0var m,n:real;i:integer;beginRead(m,n);if abs(m-n)<1 then begin;  write('Absent');  exit; end;for i:=trunc(m)+1 to trunc(n) dowriteln(i);end.
    • Автор:

      sampson65
    • 6 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years