Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2010, 17:49   #1
cbuilderx
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 18
Вопрос Решето Эратосфена

Привет всем программистам этого форума.
Вот такая проблема:
Решаю задачу нахождения простых чисел из диапозона от 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).Я так понял,что эта функция позволяет
не проверять выход за диапозон,но в моем случае она просто не работает.
Буду всем признателен в оказанной помощи.
Вложения
Тип файла: rar eratosphen.rar (501 байт, 11 просмотров)
Дорога возникает только под шагами идущего...

Последний раз редактировалось JTG; 26.10.2010 в 14:08.
cbuilderx вне форума Ответить с цитированием
Старый 25.10.2010, 18:44   #2
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

FillChar заполняет массив значениями n
вылетает, потому что макс значение longbool и есть 2147483647
попробуй переделать под тип extended
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц