wrest, благодарю за комментарий! Чуть позже буду разбираться.
Нет, число не может входить в разные подмассивы, т.к. встречается не более одного раза.
Для чего мне все это нужно? Вот мое решение:
Код:
r=(1+sqrt(5))/2
\\ в поздней версии можно также использовать r=quadgen(5)
seq_upto(nMax)={my(v1, v2, v3, v4, v5); nMax++;
v1=vector(nMax, i, 0); v1[1]=1; for(i=1, nMax-1, v1[i+1]=v1[i\r+1]+1);
v2=vector(nMax, i, 0); v2[1]=1; for(i=2, nMax, v2[i]=v1[i]-v1[i-1]);
v3=vector(v1[nMax]\2,i,0); v3[1]=[2,4];
for(i=2, v1[nMax]\2, v3[i]=[v3[i-1][1]+fibonacci(2*i),v3[i-1][2]+fibonacci(2*i+1)]); my(j=2, A=0, B=0);
until(B>=nMax, A=if(j==2,6,B); v3[1]=concat(v3[1],A); j++; B=if(v2[v3[1][j]+1],v3[1][j]+fibonacci(v1[j])+1,v3[1][j]+1));
for(i=2,v1[nMax]\2, my(j=2, A=0, B=0); until(B>=nMax, A=if(j==2,v3[i-1][3]+fibonacci(2*i+2),B); v3[i]=concat(v3[i],A); j++; B=v3[i-1][j+1]+fibonacci(v1[j+1]+2*i-1)));
v4=vector(nMax-1, i, 0);
for(i=1, nMax-1, my(A, B, j=1); until(A>0 || v2[i], A=sum(k=1,#v3[j],j*(v3[j][k]==i)); B=sum(k=1,#v3[j],k*(v3[j][k]==i)); j++); v4[i]=if(v2[i],[(v1[i]+1)\2,1-v1[i]%2],[A,B]));
v5=vector(nMax-1,i,0);
for(i=1, nMax-1, v5[i]=if(v4[i][2]==0,2^(v4[i][1]-1)*(2^v4[i][1]+1),2^(v4[i][1]-1)*(v5[v4[i][2]]+2^(v1[v4[i][2]]+v4[i][1])))); v5}
Решение реализовано в цикле после того, как задан массив
v4.
Что генерирует в конечном счете программа? Вот эту последовательность:
https://oeis.org/draft/A353654.
Программа связана со следующими формулами:
Код:
Since {A000045(2n)} UNION {A133512(n) + 1} UNION {A133512(n) + A000045(A072649(n) + 3) + 1} UNION {A133512(n) + A000045(A072649(n) + 3) + A000045(A072649(n) + 5) + 1} UNION ... UNION {A133512(n) + 1 + Sum_{k=1..m} A000045(A072649(n) + 2k + 1)} UNION ... etc. is essentially natural numbers, we can generate sequence by the following:
a(A000045(2n)) = 2^(n-1)*(2^n + 1) for n > 0.
a(A133512(n) + 1) = a(n) + 2^(A072649(n) + 1) for n > 0.
a(A133512(n) + A000045(A072649(n) + 3) + 1) = 2*(a(n) + 2^(A072649(n) + 2)) for n > 0.
a(A133512(n) + A000045(A072649(n) + 3) + A000045(A072649(n) + 5) + 1) = 2^2*(a(n) + 2^(A072649(n) + 3)) for n > 0.
a(A133512(n) + 1 + Sum_{k=1..m} A000045(A072649(n) + 2k + 1)) = 2^m*(a(n) + 2^(A072649(n) + m + 1)) for n > 0.
Они выводятся из определения, которое предложил некий
Kevin Ryde. Определение такое: если
- член последовательности, то
и т.д. также являются членами этой последовательности, где
это двоичная запись
. Очевидно, что результирующие числа также записаны в двоичной записи. Здесь
может быть также единицей (вероятно это значение будет включено в последовательность как
).
В программе массив
v1 это
A072649, массив
v2 это
A010056; массив
v3 это основной массив из первого поста. Здесь подмассив
v3[1] это
A133512+1, подмассив
v3[2] это подмассив
v3[1], увеличенный на
A000045(
A072649 + 3); подмассив
v3[3] это подмассив
v3[2], увеличенный на
A000045(
A072649 + 5); и т.д., т.е. подмассив
v3[k] это подмассив
v3[k-1], увеличенный на
A000045(
A072649 + 2k - 1).
Для удобства массивы генерируются под наши нужды, т.е. следующий после максимального элемент в каждом из подмассивов всегда
nMax.
Вместо
v5 можно выводить в конце другие массивы, чтобы посмотреть на то, что именно в них содержится.
К сожалению программа почему-то не работает для
nMax , где
,
и
.