DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦5e0ea8d2e⟧ TextFile

    Length: 2304 (0x900)
    Types: TextFile
    Names: »prime3tx    «

Derivation

└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
    └─⟦75ff9bef3⟧ 
        └─⟦this⟧ »prime3tx    « 

TextFile

program prime3 (output);
  const
    setsize            = 128;
    maxelement         = 127;
    setparts           = 39 ; (*= 10000 div setsize div 2*)

  type
    natural            = 0..maxint;

  var
    sieve, primes      : array Æ0..setpartsÅ of set of 0..maxelement;
    nextprime          : record
                           part, element : natural;
                         end;
    multiple, newprime : natural;
    p, n, count        : natural;
    empty              : boolean;

begin (*initialize*)
  for p := 0 to setparts do
  begin
    sieve  ÆpÅ := Æ0..maxelementÅ;
    primes ÆpÅ := ÆÅ;
  end;

  sieve Æ0Å         := sieve Æ0Å - Æ0Å;
  empty             := false;
  nextprime.part    := 0;
  nextprime.element := 1;

  with nextprime do
  repeat (*find next prime*)
    while not (element in sieve ÆpartÅ) do
      element := succ (element);

    primes ÆpartÅ := primes ÆpartÅ + ÆelementÅ;
    newprime      := 2 * element + 1;
    multiple      := element;
    p             := part;

    while p <= setparts do (*eliminate*)
    begin
      sieve ÆpÅ := sieve ÆpÅ - ÆmultipleÅ;
      p         := p + part * 2;
      multiple  := multiple + newprime;
      
      while multiple > maxelement do
      begin
        p        := p + 1;
        multiple := multiple - setsize;
      end;
    end (*while p <= setparts*);

    if sieve ÆpartÅ = ÆÅ then
    begin 
      empty   := true;
      element := 0;
    end;

    while empty and (part < setparts) do
    begin
      part  := part + 1;
      empty := sieve ÆpartÅ = ÆÅ;
    end;
  
  until empty;

  count := 0;
  for p := 0 to setparts do
    for n := 0 to maxelement do
      if n in primes ÆpÅ then
      begin
        write (output, 2 * n + 1 + p * setsize * 2:6);
        count := count + 1;
        if (count mod 8) = 0 then
          writeln (output);
      end;

end.

    
▶EOF◀