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.