Если используется в цикле, то проще сразу выделить вектор/матрицу с большим запасом, в цикле заполнить, а по выходу обрезать (m=m[1..n]) до нужного размера, только это запросто даст ускорение до порядка.
В общем, вот такой вот крокодилиум (отказался от конкатов и ввернул еще два внутренних цикла) действительно работает еще на порядок-другой быстрее:
(код)
Код:
cz_eur(n)={my(sn=ceil(5*n/3)+7,px=floor((sn-n-3)/2)+1,
Rcurr=matrix(1,3,i,j,[1,0,px][j]),
Rnext=matrix(px,4),
spx=0,k0=1,
R,s,m,ma,un);
printp(["n","R_min","R_max","#","m_max"]);
for(i=1,n,
a=matsize(Rcurr)[1];
if(i>1,printp([i-1,vecmin(Rcurr[1..a,1]),vecmax(Rcurr[1..a,1]),a,vecmax(Rcurr[1..a,4..i+2])])
,printp([i-1,vecmin(Rcurr[1..a,1]),vecmax(Rcurr[1..a,1]),a]));
for(j=1,a,
R=Rcurr[j,1];
s=Rcurr[j,2];
px=Rcurr[j,3];
if(i>1,m=Rcurr[j,4..i+2]);
if(px>=1,
if(i==1,f=2,f=1-R%3);
for(k=1,px,
rnk=(R<<(2*k+f)-1)/3; rnkm=rnk%3;
mk=2*k+f;
snk=s+mk;
dspx=if(rnkm==1,floor((sn-snk-n+i+1)/2),
rnkm==2,ceil((sn-snk-n+i+1)/2),
rnkm==0,0);
if(dspx>0,spx=spx+dspx);
kin=k+k0-1;
Rnext[kin,1]=rnk;
Rnext[kin,2]=snk;
Rnext[kin,3]=dspx;
Rnext[kin,i+3]=mk;
if(i>1,for(v=4,i+2,Rnext[kin,v]=m[v-3]));
);
k0=k0+px;
);
);
Rcurr=Rnext;
\\printp(Rcurr);
Rnext=matrix(spx,i+4);
spx=0;
k0=1;
);
a=matsize(Rcurr)[1];
printp([n,vecmin(Rcurr[1..a,1]),vecmax(Rcurr[1..a,1]),a,vecmax(Rcurr[1..a,4..n+3])]);
printp(Rcurr);
};
До практичности, впрочем, далеко:
он считал 6 минут, с максимальным количеством в
вариантов на
-ом шаге.
-- 22.11.2023, 20:33 --Про 5ку. Если нечетное число минимальное для всех других чисел этого уровня
То 5ка всегда элемент последовательности.
Что следует из вот этого легко доказуемого утверждения:
Оно верно, если преобразовать выражение в скобке, то это уже очевидно.
Если непонятно, спросите профессиональных математиков. Если такие есть в вашем окружении.
У Вас несколько другие обозначения, в частности, Ваше
в обозначениях, принятых в топике. Действительно, очевидно, что
это единица или двойка для минимальных чисел. Пользуясь Вашими обозначениями, вопрос топика звучит так: верно ли, что для минимальных нечетных сваливающихся в единицу за
утроений, всегда
?