PCIRCLE - Vòng số nguyên tố

Tác giả: flashmt

Ngôn ngữ: Pascal

const max=10000;
      re:array[1..9] of longint=(1,2,2,4,96,1024,2880,81024,770144);
var n:byte;
    dem:longint;
    a,t:array[1..20] of byte;
    d:array[2..20] of byte;
    prime:array[2..39] of byte;

procedure init;
var i,j:byte;
begin
     fillchar(prime,sizeof(prime),0);
     for i:=2 to 37 do
         if prime[i]=0 then
         begin
              j:=2*i;
              while j<=39 do
              begin
                   prime[j]:=1;
                   j:=j+i;
              end;
         end;
end;

procedure rf;
begin
     read(n);
end;

procedure att(i:byte);
var j,k:byte;
begin
     for j:=2 to 2*n do
     begin
          if (d[j]=0) and (prime[j+a[i-1]]=0) then
          begin
               a[i]:=j; d[j]:=1;
               if i<2*n then att(i+1)
               else
               begin
                    if prime[a[i]+1]=0 then
                    begin
                         for k:=1 to 2*n do write(a[k],' ');
                         writeln;
                         inc(dem);
                         if dem>max then break;
                    end;
               end;
               a[i]:=0; d[j]:=0;
          end;
     end;
end;

procedure pr;
var i,j:byte;
begin
     writeln(re[n]);
     fillchar(a,sizeof(a),0);
     fillchar(d,sizeof(d),0);
     init;
     dem:=1;
     a[1]:=1;
     att(2);
end;

begin
     rf;
     pr;
end.

Download