PCIRCLE - Vòng số nguyên tố
Tác giả: ladpro98
Ngôn ngữ: Pascal
program pcircle;
uses math;
const a :array[1..9] of longint = (1,2,2,4,96,1024,2880,81024,770144);
var res:array[1..20] of longint;
check:array[1..20] of boolean;
n,k:longint;
done:boolean;
function isPrime(x:longint):boolean;
var k,n:longint;
begin
n:=x;
if (n=2) or (n=3) or (n=5) or (n=7) then exit(true);
if n mod 2 = 0 then exit(false);
if (n mod 3 = 0) then exit(false);
k:=0;
while k<=trunc(sqrt(n)) do
begin
inc(k,6);
if (n mod (k-1) = 0 ) or (n mod (k+1) = 0) then exit(false);
end;
isPrime:=true;
end;
procedure print;
var i:longint;
begin
for i:=1 to n do
write(res[i],' ');
writeln;
end;
procedure back(i,val:longint);
var j:longint;
begin
if done then exit;
if i>n then
begin
if (isprime(val+res[1])) then
begin
inc(k);
if k>10000 then done:=true
else
print;
end;
exit;
end;
for j:=1 to n do
if (not check[j]) and isprime(val+j) then
begin
check[j]:=true;
res[i]:=j;
back(i+1,j);
check[j]:=false;
end;
end;
begin
readln(n);
fillchar(check,sizeof(check),false);
k:=0;
n:=2*n;
res[1]:=1;
check[1]:=true;
writeln(a[n div 2]);
back(2,1);
end.