Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Определение простых чисел с дополнительным условием

431
10 февраля 2008 года
sherry
207 / / 16.10.2006
Доброго времени суток, уважаемые эксперты!
Дана задача:
Любимые числа Деда Мороза

Дед Мороз любил развлекаться с числами и цифрами. Более всего он любил цифру 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. Толкового мало чего получилось..
360
10 февраля 2008 года
P*t*
474 / / 15.02.2007
Для проверки числа на простоту можно вместо того чтобы пробовать делить на все меньшие числа, делить только на ранее найденые простые числа
280
10 февраля 2008 года
ВуД™
326 / / 04.01.2006
Решето Эратосфена + возможно, отказаться от работы со строками (проверять на наличие последовательности цифр "13" с помощью div/mod).
33K
08 марта 2008 года
morf
6 / / 20.10.2007
Также если исло больше 3 то можно проверять остаток от деления на 6.
Если он не равен ни 1 ни 5 то число однозначно составное. Иногда очень позвляет сократить время проверки простоты числа.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог