上限=100000大值=集([])小值=矢量(4,i,[])参见索引(z)={my(s=1,x=实(z),y=图像(z));如果(x<1,s+=1;x=1-x;);如果(y<0,s+=2;y=-y;);返回([s,x,y]);}参见(z)={my(索引=参见索引(z));如果(最大值(索引[2],索引[3])>大极限,big values=集合并集(big values,set([z])),if(#小值[索引[1]]<索引[2],小值[索引[1]]=concat(小值[指标[1]],向量(指标[2]-小值[指数[1])));小值[索引[1]][索引[2]]=位或(小值[指数[1]][指数[2]],2^索引[3]));}参见(z)={my(索引=参见索引(z));如果(最大值(索引[2],索引[3])>大极限,return(设置搜索(大值,z)),if(#小值[索引[1]]<索引[2],返回(0),返回(位测试(小值[索引[1]][索引[2],索引[3]))););}neigbbours(z)=if(实数(z)%2==imag(z)%2,[z-1,z+1,z-I],[z-1,z+1,z+I])新邻居(z)={选择(zz->!seen(zz)&&#select(seen,neigbbours(zz,邻居))==1,邻居(z))}分配内存(2^30)c=设置(0);nb=0;{对于(n=0,10 000,打印(n“”nb);nb+=#c;对于(i=1,#c,参见(c[i]););c=设置(concat(应用(新邻居,c)));}退出