Разное - Pascal
|
Старожил Сообщения: 361 |
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Чем вы компилируете и под какой ОС и на какой машине запускаете?
И дайте пример файла primes.in на котором тормозит. divisor := divisor + 1; - заменяем на inc(divisor); И освобождаем ресурсы! Также смотрим:Решето_Эратосфена и http://www.helloworld.ru/texts/comp/...mple/index.htm |
------- Последний раз редактировалось BlackEric, 01-09-2009 в 22:19. Причина: Добавление Отправлено: 21:56, 01-09-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ManHack:
Расставь комментарии пожалуйста. Или опиши применяемый метод. Цитата ManHack:
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 и т.д. Не проще ли сразу на них проверить? |
||
------- Отправлено: 22:50, 01-09-2009 | #3 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Всё о 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 |
|