В научных целях (исследование кода) я использую Mathematica для перечисления всех периодических последовательностей некоторых линейных повторений. В качестве примера команда
Table[{Mod[i * 2^n + j * 4^n + k * 6^n, 7] },{i, 0, 5}, {j, 0, 5}, {k, 0, 5}, {n, 0, 5}]
позволяет перечислять все 216 различных периодических последовательностей линейных рекуррентных последовательностей в конечном поле порядка 7 (или мода 7) с характеристическим полиномом, корни которого равны 2,4 и 6. Первые пять создаваемых последовательностей:
{0, 0, 0, 0, 0, 0}, {1, 6, 1, 6, 1, 6}, {2, 5, 2, 5, 2, 5}, {3, 4, 3, 4, 3, 4}, {4, 3, 4, 3, 4, 3}, …
У меня два вопроса:
i) Первая последовательность получается, когда i=0,j=0,k=0;
, вторая, когда i=0,j=0,k=1,
, третья, когда i=0,j=0,k=2,
и т. Д. Есть ли способ соединить эти числа с последовательностью, которую они генерируют, чтобы я узнал эти параметры? и, следовательно, чтобы иметь возможность позже (при необходимости) генерировать определенную последовательность? То есть мне бы хотелось, чтобы на выходе было что-то вроде этого
{{0, 0, 0, 0, 0, 0}, {0, 0, 0}}, {{1, 6, 1, 6, 1, 6}, {0, 0, 1}}, {{2, 5, 2, 5, 2, 5}, {0, 0, 2}} , etc.
ii) В приведенном выше примере (линейное повторение 3-го порядка и мод 7) количество полученных последовательностей (216) можно контролировать вручную; но это число растет очень быстро, когда линейное повторение имеет порядок выше 3, а поле имеет характеристику выше 7. И в этих случаях большинство создаваемых последовательностей меня не интересуют. Я думаю, что я мог бы выбросить, по крайней мере, 99% последовательностей, которые меня не интересуют, если бы я мог добавить инструкцию, которая читала бы выходные данные (полученные последовательности) и говорила бы: «Я хочу, чтобы последовательности были такими, чтобы продукты их element is 216 (скажем) »: из пяти вышеперечисленных последовательностей останется только {1, 6, 1, 6, 1, 6}
, потому что 1x6x1x6x1x6 = 216 $; или «Я только хочу, чтобы последовательности таких элементов составляли 216 или 1000 (скажем)» из пяти вышеприведенных последовательностей {1, 6, 1, 6, 1, 6}
и {2, 5, 2, 5, 2, 5}
, потому что 1x6x1x6x1x6 = 216 и 2x5x2x5x2x 5 = 1000.
Возможно ли это сделать? Я попробовал некоторые манипуляции со списком и таблицами, но безуспешно.
Заранее спасибо.