Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Pascal

Ответить
Настройки темы
Разное - Pascal

Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Имеется задача:
http://imageban.ru/show/2009/09/01/2...a22e13c429/jpg


Код написан:
Код: Выделить весь код
{$N+,E-}
program book1;
var
	m, n: 2..300000;
   input, output: text;
   absent: boolean;
   i, j, root, divisor: longint;
   prim: boolean;
begin
   assign (input, 'primes.in');
   reset (input);
   assign (output, 'primes.out');
   rewrite (output);
   absent := true;
   while not eof(input) do
   	readln (input, m, n);
   i := m;

  { while i < n do begin
      prim := true;

      for j:= 2 to root do
      	if (i mod j = 0) and (i <> j) then
         	prim := false;
      if prim then begin
			writeln (output, i);
      	absent := false;
    	end;
      i := i + 1;
   end;    }
   while i < n do begin
   	root := trunc(sqrt(i));
      divisor := 2;
      prim := true;
   	while (divisor <= root) and prim do begin
      	if i mod divisor <> 0 then
         	prim := false;
      	divisor := divisor + 1;
   	end;
      if prim then
      	write (output, i, ' ');
   end;
   if absent then
		writeln (output, 'Absent');

	writeln ('All done.');
end.
(вроде это та версия... ^^)

А теперь главное: ограничения программы указываются для компьютера Intel Celeron 400.

Программа при M и N близких к граничным значениям работает куда больше 6 секунд!
Как с этим бороться?

Отправлено: 19:56, 01-09-2009

 

Старожил


Сообщения: 433
Благодарности: 63

Профиль | Отправить PM | Цитировать


Чем вы компилируете и под какой ОС и на какой машине запускаете?

И дайте пример файла primes.in на котором тормозит.

divisor := divisor + 1; - заменяем на inc(divisor);
И освобождаем ресурсы!

Также смотрим:Решето_Эратосфена и
http://www.helloworld.ru/texts/comp/...mple/index.htm

-------
photoua.narod.ru


Последний раз редактировалось BlackEric, 01-09-2009 в 22:19. Причина: Добавление


Отправлено: 21:56, 01-09-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Цитата ManHack:
Как с этим бороться? »
Оптимизировать алгоритм
Расставь комментарии пожалуйста. Или опиши применяемый метод.
Цитата ManHack:
Код: Выделить весь код
while (divisor <= root) and prim do begin
 if i mod divisor <> 0 then
 prim := false;
 divisor := divisor + 1;
 end;
»
Т.е. для проверки n'ой цифры на предмет простоты необходимо проделать
T=n/2+n/3*2)+E{n/i-2} 5<i<sqrt(n) сравнений? где i - простое. E - сумма.
сравнений?
Не лень алгоритму будет подниматься каждый раз снизу вверх проходя каждый каждый 3 раз 1 лишний цикл, каждый 5 ый - 3 и т.д. ?
Я подвожу к той мысли, что в памяти мы вроде как не сильно ограничены. Примени массив простых чисел и сверяй с ним! Зачем по 100 раз совершать ненужные действия? Для i=123 будут проверены ВСЕ! числа включая все кратные 2,3,5,7,11,13,17,19,23 и т.д. Не проще ли сразу на них проверить?

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 22:50, 01-09-2009 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Pascal

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Всё о TURBO PASCAL (обсуждение, помощь в написание программ, ошибки, Pascal ABC) Loading Программирование и базы данных 41 20-05-2015 15:28
C/C++ - Pascal | c++ Snake750 Программирование и базы данных 2 06-04-2009 21:59
Delphi - pascal))) keep21 Программирование и базы данных 2 14-05-2008 09:46
Pascal Guest Программирование и базы данных 6 26-10-2004 17:56
Pascal BeerMan Программирование и базы данных 18 02-03-2002 01:55




 
Переход