A328021飞机
定义和顺序数据
1、2、3、5、4、6、8、10、7、9、12、11、15、14、13、16、17、18、20、19、21、22、23、25、24、26、27、28、30、29、31、32、33、35、34、36、37、38、40、39、41、42、43、45、44、46、47、48、50、49、51、53、55、52、54、56、58、60、57、59、62、65、61、64、66、63、70、68、73、67、69、75
评论
目前还不知道N是否可以任意大。我们知道N>=10^5。 如果N可以是任意大的,可以理解,这个序列是作为N->oo的极限序列,它是正整数的置换。 序列可以是有限长的N,但所有正整数的相应置换仍然可以存在。 然后,所有n>n的最大值为{a(k),k<=n}>n。 任何5的倍数都必须出现在两个较小的项之间,因为与较大项的和和差将共享最后的数字。 事实上,如果x>m,我们有|x-m|=x-m=x+m(mod 10)<=>0=2m(mod10)<>m=0(mod 5)。
算法
用M表示尚未使用的5的倍数集。
对于m中的m,设N(m)是m的可能邻域集,即尚未出现的较小数字,并且与m的差和和不共享一个数字。 (仅考虑#N(m)<3的m就足够了。)
如果某个N(m)是单个{x},那么接下来的两项必须是m,x。 否则,下一项是最小的可接受数x(这样与上一项的和和和差就不会共享一个数字),之前没有使用过,并且它不是多于一个N(m)的成员,正好有两个元素。 重复上述步骤。
PARI计划
{A_vec(n/*要计算的向量长度*//*程序 A328021飞机 v.3:动态增加列表数量 ,a=1/*初始值,未实际使用*/ ,U=[0]/*U是一组已使用的数字,从U[1]开始=最小未使用的数字-1*/ )= my(c(x,y)=#setintersect(Set(digits(abs(y-x))),Set(dicities(x+y)))/*计算x+y和|x-y|共享的位数*/ ,N(U,N=U[1]\5*5,L=List())=/*列出不在U中的5的最小倍数的邻居*/ while(setsearch(U,n+=5),); 列表输入(L,n); 而(U[1]<n-=1,c(n,L[1])||setsearch(U,n)||listput(L,n)); Vecrev(左) ,L.last=L[#L],L=[[]],o);/* 列表L[k]将存储第k个5的下一个倍数的邻居列表,包括该倍数*/ 向量(n,n,o=a;/*存储电流=“旧”项*/ 对于(k=1,#L,L[k]/*如果为空,则弹出下一个*/||而(k<#L,L[k]=L[k+=1])||/*现在,在任何情况下,k=#L,我们将停止*/ 如果(4>#L[k]=N(U,如果(k>1,L[k-1].last,U[1]\5*5))/*计算最后一个,如果不>=elts,添加一个新列表*/, L=连接(L,[N(U,L[k].last)]); 打印1(L.last)) ); 对于(k=1,#L,如果(#L[k]<3/*如果列表只剩下2个:首先使用最大的*/ ,c(o,a=L[k].last)&&error([n,a,o,L])/*检查(创建时只有2个元素)*/; 中断 ,k==#L/*到达列表末尾:搜索尽可能最小的词*/ ,a=U[1];/* 小于最小候选值一个(必须是未使用的、可接受的&不能将两个列表减少为单个)*/ while(setsearch(U,a+=1)||c(o,a)||#select(L->#L==3&&setseach(L,a),L)>1,); /*如果“a”是5的倍数(如果到目前为止“邻居”是“坏的”,就会发生这种情况),那么相应的列表就会过时*/ a%5|| for(k=1,#L,a==L[k].last&&L[k]=[]) ) ); U=集合并(U,[a]); 而(#U>1&&U[2]==U[1]+1,U=U[^1]);/* 更新已用术语列表*/ 对于(k=1,#L,集合搜索(L[k],a)&&L[k]=集合减号(L[k,[a])); a) }\\返回向量a(1..n)。 警告:对于非常大的n>>10^4,可能需要更多的邻居列表。
与该序列相关的附加PARI代码
间隙(i,A=A)=abs(A[i]-A[i+1])\\计算指数i处的间隙 间隙(A,m=9)=select(i->gap(i,A)>=m,[1..#A-1],1)对于#A>5e5,间隙的返回指数>=m/*变得非常缓慢*/ fg(g=11,A=A)=对于(i=2,#A,abs(A[i]-A[i-1])>g&&return(i-1))\\查找第一个间隙>g/*仍然很快*/ xt(i,A=A,L=9)=vecextract(A,[i-L.i+L])\\提取索引i周围的短范围。可以“应用”到索引列表 D(A)=A[^1]-A[^-1]\\矢量A的第一个差异。例如,vecmax(abs(D(A)))