Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Решето Эратосфена, Нахождение простых чисел 
:(
    Опции темы
obsidium
  Дата 25.10.2010, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



Привет всем программистам этого форума.
Вот такая проблема:
Решаю задачу нахождения простых чисел из диапозона от 2..n.
Причем,нужно считать два числа из файла и найти все простые числа.
Т.е.

Input:
2 15
Output:
2 3 5 7 11 13

Input:
23
Output:
23

Вот код:
Код



program eratosphen;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
 MyArray=Array of LongBool;

var
 a:MyArray;
 m,n:Longword;
 i,j,t:Longword;
 t1,t2:Text;
begin
 assign(t1,'input.txt');  reset(t1);
 assign(t2,'output.txt'); rewrite(t2);

 read(t1,m,n);

 if n=0 then begin
  if (m div m=1) and (m mod 2<>0) then write(t2,m);
 end;


 SetLength(a,n);

 //for i:=0 to n-1 do
 //a[i]:=not a[i];
  //FillChar(a,sizeof(a),n);
  t:=round(sqrt(n));
   for i:=m to t do
    {if A[i] then} begin
    j:=i*i;
   while j<=n do begin
    A[j]:=true;
    j:=j+i;
   end;
end;

for i:=m to n do
 if a[i]=false then write(t2,i,' ');

close(t1);
close(t2);
halt(0);
end.

Проблема в том,что при диапозоне 2..2147483647 вылетает с ошибкой.Не считает.
Алгоритм взял из wikipedia.В нем есть FillChar(a,sizeof(a),n).Я так понял,что эта функция позволяет
не проверять выход за диапозон,но в моем случае она просто не работает.
Буду всем признателен в оказанной помощи. smile 

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  eratosphen.dpr 0,68 Kb
PM MAIL   Вверх
Xenag
Дата 25.10.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 51
Регистрация: 6.3.2010

Репутация: нет
Всего: нет



Конечно не считает.
2147483647 LongBool - это 8Гб оперативки.
А больше двух тебе никто не даст.

Добавлено через 2 минуты и 22 секунды
FillChar просто зануляет твой массив.
В принципе, если заменить LongBool на byte, то как раз 2147483647 в 2 Гб поместится.
Только потребуется проверять не на true, а на 1.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0380 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.