由于8次多项式有9个系数,其中8次的系数一定为一,所以它的全体为2⁸个,即256个,0~255。8次可约的多项式全体B为B1,B2,B3,B4的并集。其中B1为1次多项式与7次多项式的乘积,B2为2次多项式与6次多项式的乘积,B3为3次多项式与5次多项式的乘积,B4为4次多项式与4次多项式的乘积。全集S-B=A,此时A为8次不可约多项式的全体。(S,A,B)均为集合。
为求出8次不可约多项式全体S,需要求得8次多项式全集与8次可约多项式全集,并将它们做差,求得8次不可约多项式全体。建立数学模型的基本步骤如下:
第一步:构造8次多项式全集
算法一:8次多项式中的系数为1,其他项系数任意,则系数矩阵为100000000~111111111,观察系数矩阵的变化规律:第一列全为1;第二列平均分为两份,上面全为0,下面全为1;第三列平均分为四份,前0~1/4,2/4~3/3全为0,1/4~2/4,3/4~最后全为1……以此类推:第1行全为1,以后每一行行数减1模(n表示第n列)得到的数字若大于列数/,此处系数置为1,反之为0。
eg:4次多项式的系数如下所示(二元域)
1 0 0 0 0
1 0 0 0 1
1 0 0 1 0
1 0 0 1 1
1 0 1 0 0
1 0 1 0 1
1 0 1 1 0
1 0 1 1 1
1 1 0 0 0
1 1 0 0 1
1 1 0 1 0
1 1 0 1 1
1 1 1 0 0
1 1 1 0 1
1 1 1 1 0
1 1 1 1 1
算法二:因为系数开始为100000000B,并且每次加1,直到111111111B。想要得到S,可以将系数拆分为9个数字。最终成为系数矩阵。
第二步:构造8次可约多项式的全
1,2,3,4,5,6,7次多项式的构造与8次多项式的构造一致。B4集由2个4次多项式矩阵相乘求得,1个4次多项式矩阵为16行5列,两个矩阵相乘将得到256种结果。假设其中系数为10010与系数为11101的多项式相乘。它们下标之和为2~10,相乘得到8次多项式,所以相乘后系数矩阵应为9位,下标为1~9。可以表示为k-1。如果下标之和为k,那么它们的系数之和是k-2次多项式的系数。最终得到B4,将B4模2即可得到0,二元域上的多项式。B1,B2,B3集合与B4求法一致。
第三步:做差
调用union(matlab)函数求得B1,B2,B3,B4的并集B,调用setdiff函数求全集S与B的差集A,A就是8次不可约多项式的系数。
%8次不可约多项式的寻找
B1=zeros(256,9);
B11=zeros(2,2);
B17=zeros(128,8);
B2=zeros(256,9);
B22=zeros(4,3);
B26=zeros(64,7);
B3=zeros(256,9);
B33=zeros(8,4);
B35=zeros(32,6);
B4=zeros(256,9);
B414=zeros(16,5);
B424=zeros(16,5);
S=zeros(256,9);
%8次不可约多项式的全体S系数矩阵的构造
s1=size(S,1);
s2=size(S,2);
for i=1:s1
for j=1:s2
if(j==1)
S(i,j)=1;
end
if(j>=2)
n=j-2;
p=2^n;
h=mod((i-1),s1/p);
if(h>=(s1/(p*2)))
S(i,n+2)=1;
else
S(i,n+2)=0;
end
end
end
end
%1次多项式B11 系数矩阵的构造
s1=size(B11,1);
s2=size(B11,2);
for i=1:s1
for j=1:s2
if(j==1)
B11(i,j)=1;
end
if(j>=2)
n=j-2;
p=2^n;
h=mod((i-1),s1/p);
if(h>=(s1/(p*2)))
B11(i,n+2)=1;
else
B11(i,n+2)=0;
end
end
end
end
%7次多项式B17 系数矩阵的构造
s1=size(B17,1);
s2=size(B17,2);
for i=1:s1
for j=1:s2
if(j==1)
B17(i,j)=1;
end
if(j>=2)
n=j-2;
p=2^n;
h=mod((i-1),s1/p);
if(h>=(s1/(p*2)))
B17(i,n+2)=1;
else
B17(i,n+2)=0;
end
end
end
end
%2次多项式B22 系数矩阵的构造
s1=size(B22,1);
s2=size(B22,2);
for i=1:s1
for j=1:s2
if(j==1)
B22(i,j)=1;
end
if(j>=2)
n=j-2;
p=2^n;
h=mod((i-1),s1/p);
if(h>=(s1/(p*2)))
B22(i,n+2)=1;
else
B22(i,n+2)=0;
end
end
end
end
%6次多项式B26 系数矩阵的构造
s1=size(B26,1);
s2=size(B26,2);
for i=1:s1
for j=1:s2
if(j==1)
B26(i,j)=1;
end
if(j>=2)
n=j-2;
p=2^n;
h=mod((i-1),s1/p);
if(h>=(s1/(p*2)))
B26(i,n+2)=1;
else
B26(i,n+2)=0;
end
end
end
end
%3次多项式B33 系数矩阵的构造
s1=size(B33,1);
s2=size(B33,2);
for i=1:s1
for j=1:s2
if(j==1)
B33(i,j)=1;
end
if(j>=2)
n=j-2;
p=2^n;
h=mod((i-1),s1/p);
if(h>=(s1/(p*2)))
B33(i,n+2)=1;
else
B33(i,n+2)=0;
end
end
end
end
%5次多项式B35 系数矩阵的构造
s1=size(B35,1);
s2=size(B35,2);
for i=1:s1
for j=1:s2
if(j==1)
B35(i,j)=1;
end
if(j>=2)
n=j-2;
p=2^n;
h=mod((i-1),s1/p);
if(h>=(s1/(p*2)))
B35(i,n+2)=1;
else
B35(i,n+2)=0;
end
end
end
end
%4次多项式B414 系数矩阵的构造
s1=size(B414,1);
s2=size(B414,2);
for i=1:s1
for j=1:s2
if(j==1)
B414(i,j)=1;
end
if(j>=2)
n=j-2;
p=2^n;
h=mod((i-1),s1/p);
if(h>=(s1/(p*2)))
B414(i,n+2)=1;
else
B414(i,n+2)=0;
end
end
end
end
%4次多项式B424 系数矩阵的构造
s1=size(B424,1);
s2=size(B424,2);
for i=1:s1
for j=1:s2
if(j==1)
B424(i,j)=1;
end
if(j>=2)
n=j-2;
p=2^n;
h=mod((i-1),s1/p);
if(h>=(s1/(p*2)))
B424(i,n+2)=1;
else
B424(i,n+2)=0;
end
end
end
end
%B4矩阵的构造 两个4次多项式相乘
m=size(B414,1);
n=size(B424,1);
p=size(B414,2);
q=size(B424,2);
sum=0;
for i1=1:m
for i2=1:n
h=zeros(1,9);
w=0;
sum=sum+1;
for j1=1:p
for j2=1:q
k=j1+j2;
w=B414(i1,j1)*B424(i2,j2);
h(1,k-1)=h(1,k-1)+w;
end
end
h(1,:)=mod(h(1,:),2);
B4(sum,:)=h;
end
end
%B3矩阵的构造 3次多项式与5次多项式相乘
m=size(B33,1);
n=size(B35,1);
p=size(B33,2);
q=size(B35,2);
sum=0;
for i1=1:m
for i2=1:n
h=zeros(1,9);
w=0;
sum=sum+1;
for j1=1:p
for j2=1:q
k=j1+j2;
w=B33(i1,j1)*B35(i2,j2);
h(1,k-1)=h(1,k-1)+w;
end
end
h(1,:)=mod(h(1,:),2);
B3(sum,:)=h;
end
end
%B2矩阵的构造 2次多项式与6次多项式相乘
m=size(B22,1);
n=size(B26,1);
p=size(B22,2);
q=size(B26,2);
sum=0;
for i1=1:m
for i2=1:n
h=zeros(1,9);
w=0;
sum=sum+1;
for j1=1:p
for j2=1:q
k=j1+j2;
w=B22(i1,j1)*B26(i2,j2);
h(1,k-1)=h(1,k-1)+w;
end
end
h(1,:)=mod(h(1,:),2);
B2(sum,:)=h;
end
end
%B1矩阵的构造 1次多项式与7次多项式相乘
m=size(B11,1);
n=size(B17,1);
p=size(B11,2);
q=size(B17,2);
sum=0;
for i1=1:m
for i2=1:n
h=zeros(1,9);
w=0;
sum=sum+1;
for j1=1:p
for j2=1:q
k=j1+j2;
w=B11(i1,j1)*B17(i2,j2);
h(1,k-1)=h(1,k-1)+w;
end
end
h(1,:)=mod(h(1,:),2);
B1(sum,:)=h;
end
end
%求8次可约多项式的并集
[B12,IA1,IB1] = union(B1,B2,'rows');
[B34,IA2,IB2] = union(B3,B4,'rows');
[B,IA3,IB3] = union(B12,B34,'rows');
%8次多项式全体与8次可约多项式求差集得到8次不可约多项式
[A,ia]=setdiff(S,B,'rows');
A = unique (A,'rows');