(PARI)
默认(parisizemax,2^31);
\\以下程序基于两个事实:三角形A085604号(A115627号)每行是单调的,而且最后一个非零项总是1。
\\XXX-目前不正确-在n=144时首次超额计数(?),a(144)=3而不是2:
up_to=2048;
evs_for_facts(up_to)={my(v=向量(up_to),ev=列表([]));v[1]=维奇(ev);对于(n=2,up_to,my(f=因子(n),t=#f~);如果(primepi(f[t,1])>#ev,listinsert(ev,0,1));对于(i=1,t,ev[1+#ev primepi(f[i,1])]+=f[i,2]);v[n]=维奇(ev);(v);};\\这将构建阶乘的指数向量(A115627号).
\\上述数值等于但要快得多:
evs_for_facts_slow(up_to)={my(v=向量(up_tto));对于(n=1,up_to,v[n]=Vecrev(因子(n!)[,2]~));(v);};
veclexcmp(a,b)={my(ad=长度(a),bd=长度(b),e);如果(ad!=bd,返回(符号(ad-bd));对于(i=1,ad,e=a[i]-b[i];如果(0!=e,返回(标记(e)));(0);};
search_predessor_pos(ev,facts,start=#facts)={forstep(i=start,1,-1,if(veclexcmp(facts[i],ev)<0,return(i));(0);};\\也可以作为二进制搜索实现
is_monotonic(v)=如果(#v<2,1,对于(i=2,#v,if(v[i]<v[i-1],return(0));(1)); \\ 向量v是单调的吗?
vecdiff(a,b)=向量(最大值(#a,#b),k,如果(k>#b,a[k],a[k]-b[k]));
A034876aux(ev,facts,mem)=如果(!#ev,1,my(dv,dvi,i=search_predessor_pos(ev、facts),s=0);while(#facts[i]==#ev,dv=ev-facts[i];打印(“ev=”,ev,“facts[”,i,“]=”,facts[1],“dv=”,dv);如果(is_monotonic(dv),dv=选择(x->x,dv);如果((1==dv[1])&&(0<(dvi=vecsearch(事实,dv,veclexcmp)),s+=(1+mem[dvi]),s+=A034876aux(事实,mem));i——);(s) );
A034876list(up_to)={my(v=向量(up_tto),事实=evs_for_facts(up_to));v[1]=0;对于(n=2,up_to,v[n]=A034876辅助(事实[n],事实,v));(v);};
v034876=A034876列表(up_to);
A034876美元(n) =v034876【n】\\安蒂·卡图恩2018年12月25日
|