Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
16
Добавлен:
10.12.2013
Размер:
2.46 Кб
Скачать
program primes(input, output);
const
   NodeSize = 1024;
type
   PrimeList = ^node;
   node = record
      next : PrimeList;
      data : array[1..NodeSize] of integer;
      num : integer;
   end;
var
    head : PrimeList;
    num, found, candidate : integer;

    function NewNode : PrimeList;
    var
       ptr : PrimeList;
    begin
       new(ptr);
       ptr^.next := Nil;
       ptr^.num := 0;
       NewNode := ptr;
    end; (* NewNode *)

    function InList(l : PrimeList) : boolean;
    var
        done, found : boolean;
        i : integer;
    begin
        found := false;
        done := false;
        i := 1;
        while not done do
           begin
               (* writeln('i=', i, ' num=', l^.num); *)
               if i > l^.num then
                  begin
                  done := true
                  end
               else
                  begin
                     if (candidate mod l^.data[i]) = 0 then
                        begin
                           found := true;
                           done := true
                        end
                     else
                        i := i + 1
                  end
           end;
        InList := found;
    end; (* InList *)

    procedure AddPrime(l : PrimeList);
    begin
       if l^.num >= NodeSize then
           begin
               l^.next := NewNode;
               l := l^.next;
           end;
       l^.num := l^.num + 1;
       l^.data[l^.num] := candidate;
       writeln(candidate);
       found := found + 1;
    end; (* AddPrime *)

    procedure CheckPrime;
    var
       ptr : PrimeList;
       done : boolean;
    begin
       ptr := head;
       done := false;
       while not done do
          begin
             if InList(ptr) then
                done := true
             else
                if ptr^.next = Nil then
                   begin
                      AddPrime(ptr);
                      done := true
                   end
                else
                   ptr := ptr^.next;
          end
    end; (* CheckPrime *)

begin
    head := NewNode;
    write('Enter number of primes to generate ');
    readln(num);
    found := 0;
    candidate := 2;
    AddPrime(head);
    candidate := 3;
    while found < num do
        begin
           CheckPrime;
           candidate := candidate + 2
        end
end.
Соседние файлы в папке samples