一个n次不可约多项式,如果只能整除1+Z^2^n-1
而不能整除其它1-Z^L(L<2^n-1),则这种不可约多项式就称为本原多项式。
本原多项式的另外一种定义:系数取自GF(p)上,以GF(p^m)上的本原域元素为根的最小多项式。
因为本原多项式一定以n=p^m-1级元素为根,p^m≡1(mod n),所以本原多项式的次数必然是m。
对于一个n次多项式,其本原多项式一般有若干个。下面将给出的一个算法,是求解在给定任意n值及一个本原多项式的情况下,其余本原多项式的求解方法。该算法的意义在于提供了同一n值情况下若干个可选的本原多项式,这样就允许在构造应用系统时有不同的选择方案。
已知一个n级本原多项式,求解其余的本原多项式按以下步骤进行。
(1) 首先确定n级本原多项式的个数λ(n),λ(n)即是n级本原多项式的个数。
(2) 求出小于2n-1且与2n-1互素的所有正整数,构成一个集合〔Si〕,并重新排序,使〔Si〕中元素从小到大排列。
(3) 排除〔Si〕中不适合的数
* 排除〔Si〕中形如2j(j为正整数)
* 排除〔Si〕中所有同宗的数。即从〔Si〕中从后到前搜索,每取一个数即做2K×Si,直到大于2n-1,然后减去2n-1,用差值在〔Si〕中向前搜索,如果有相同的数则将Si排除,否则保留。再取Si-1按同样过程做一遍,直到S0.
* 排除〔Si〕中有倍数关系的数。即从〔Si〕中从后到前搜索,每取一数即向前查询一遍,最后〔Si〕中剩下的数即为本原抽样数,其个数一定为λ(n)-1。
(4) 根据已知的一个n级本原多项式,为其设置初始状态000…01(n个),求出其M序列{Ai}(长度为2n-1).
(5) 依次从Si中取出本原抽样数,每取出一个抽样数Si,即可求出一个本原多项式:以Si对{Ai}进行抽样,就可产生长度为2n-1的另一M序列{Si},在{Si}中找到形如000…01(n位)的序列段{Mi},并提取包括{Mi}为前n项的2n长度的序列:
Am+0,Am+1,…,Am+n-1,
0 0 … 1
Am+n,Am+n+1,…Am+2n-1
X X … X
欲确定的Ci可用下列方程组确定;
C1=Am+n
C2=Am+n+1+C1Am+n
C3=Am+n+2+C1Am+n+1+C2Am+n
常用多项式下表为常用本原多项式:
Matlab中调用本原多项式的指令:
primpoly(m);
primpoly(m,'all');
primpoly(m,'all','nodisplay');
注意返回值是按照十进制表示的。
本原多项式