Помощь - Поиск - Пользователи - Календарь
Полная версия: Определение простых чисел с дополнительным условием
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Fil2008
Доброго времени суток, уважаемые эксперты!
Дана задача:
Любимые числа Деда Мороза

Дед Мороз любил развлекаться с числами и цифрами. Более всего он любил цифру 1, ведь именно 1.01 начинается Новый Год. Шли годы, но он так и остался суеверным - он не любил чисел, у которых после 1 стоит 3, то есть образуется число 13. На Новый Год он решил дать новое задание: посчитать, сколько любимых Дедом Морозом простых чисел есть на промежутке [А,В]?

Технические условия. Вход: Единственная строка, содержащая 2 числа: начало и конец заданного промежутка.
1 < = А,В < = 500000
Выход: Единственное число - количество любимых Дедом Морозом простых чисел.

Задача решена. Решена вроде как правильно.
Помогите сократить время выполнения алгоритма, при входных числах, скажем 10000 и 500000. Возможно кто-то в алгоритме найдёт баг.
Буду благодарен за любую подсказку.


Код:
var
   f,f1:text;
   a,b,i,count,e:integer;
   m:string;

function prost(var ch:integer):boolean;
var
  z,r:integer;
begin
  z:=ch;
  r:=2;
   while (sqr(r) <= z) and (z mod r <> 0) do inc(r);
   Prost:=(sqr(r) > z);
  if z=1 then Prost:=false;
end;

begin
  count:=0;
  assign(f, 'input.txt');
  assign(f1,'output.txt');
  reset(f);
  rewrite(f1);
  readln(f,a,b);
  if a>b then
   begin
     e:=b;
     b:=a;
     a:=e;
   end;
  for i:=a to b do
   begin
     e:=i;
     if Prost(e) then
      begin
        Str(e,m);
        if Pos('13',m)=0 then inc(count);
      end;
   end;
  writeln(f1,count);
  close(f);
  close(f1);
end.

P.S. Пробовал исключить из алгоритма поиска простых чисел все чётные числа, кроме 2. Толкового мало чего получилось..
xds
Решето Эратосфена + возможно, отказаться от работы со строками (проверять на наличие последовательности цифр "13" с помощью div/mod).
volvo
Fil2008, вопрос на засыпку: как ты считаешь, у тебя выдается правильный ответ? А какое максимальное число может поместиться в Integer по-твоему?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.