块(/*带有右三角线的m X n平铺数输入:(m,n),m=3k或n=3k*/m: 7,编号:9,/*输出:具有常数m的序列的最后一项。为了更快地执行,请设置m<=n*//*初始设置:*/如果mod(m,3)=0,则fac:1,否则fac:3,五十: 生成列表(生成列表([],k,1,2^(i-1)),i,1,m+1),L[1][1]:[0],pmax:2^m-1,保护:“”,freq1:标记列表(0,k,1,2^m),freq1[1]:1,/*辅助例程:*/合并(a,b):=如果a=“”或a=[],则a:b否则a:追加(a,b),/*生成转换参数:*/rec(s,r,ad):=块(t:2^s,如果nn>=s且mod(p,t)=r,则(li:L[nn+1-s][1+(p-r)/t],hi:“”,对于i从1到长度(li)do(q:t*li[i],对于从1到长度(ad)的j,请执行hi:merge(hi,[q+ad[j]]),L[nn+1][p+1]:合并(hi,L[nn+1][p+1)),对于从1到m do的nn(对于从0到2的p ^nn-1 do(记录(1,1,[0]),记录(2,1,[3]),记录,rec(2,0,[1,2]),rec(3,0,[7,7])),/*线性变换:*/从2到n do的nr(freq2:freq1,freq1:makelist(0,k,1,2^m),对于从0到pmax的p do(w:L[m+1][p+1],对于i从1到长度(w)do(q:w[i]、freq1[q+1]:freq1[q+1]+freq2[p+1])),x: freq1[pmax+1],如果mod(nr,fac)=0,则prot:合并(prot,[x])),保护);