f: =程序(n)
使用priqueue;
局部V、L、计数、T、V、j、q、p、TP;
五: =矢量(2^n-1);计数:=0;
五十: =[(-1)$(2^n),2^n];
初始化(pq);
插入([-2^(n),2$n],pq);
当计数<2^n-1时
T: =提取物(pq);v: =-T[1];
如果L[-1]<>v-1,则
对于从1开始的j,而L[-1]-L[-j]=j-1 do
如果L[-j]-L[-j-1]<>1且V[j]=0,则
V[j]:=L[-j];计数:=计数+1;
fiod fi;
五十: =[op(L[2..-1]),v];
q: =温度[-1];
p: =下一素数(q);
对于从n+1到2的j,乘以-1 do
如果T[j]<>q,则打破fi;
TP:=[T[1]*(p/q)^(n+2-j),op(T[2..j-1]),p$(n+2-j)];
插入(TP,pq);
od od;
op(转换(V,列表));
结束进程:
f(1):=5,2:
seq(f(i),i=1..3);