二进制域多项式基表示的模约减运算算法(多项式求余算法)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模约减:在乘法和平方算法中需要模约减以使结果的次数低于m,模约减运算由多项式长除法完成。设c(x)为一个次数i(i<=2m-2)的多项式,设f(x)为m次不可约多项式。我们可以通过消除最高项x^i来降低c(x)的次数。
c(x)=c(x)+f(x)*x^(i-m)
这个过程一直持续到c(x)的次数低于m。
如果不可约多项式想普通多项式一样存储在内存中,即由它的系数组成二进制比特串来表示,上述公式可以通过将f(x)左移(i-m)位然后加到c(x)来实现,次数大于等于m的项都需要进行多项式移位。如果内存空间不是问题,那么可以通过预计算f(x)*x^j(j=0,1...w-1)来提高运算速度,w表示二进制比特串的位数。
这种方法被用在下图所示的算法.图中,步骤1执行预运算,如果多个约减计算的f(x)相同,则步骤1可只计算一次。在步骤2中,对c(x)从高到低逐位扫描,如果该项为1,则将f(x)加到c(x)上来消除该项。由于步骤1的预运算,步骤2.1中不需要对f(x)进行移位操作。
过程分析:令c(x)=110011101,f(x)=100101 ,m=5,此处w=1,
i=8:c[8]=1,j=8-5 =3 c(x)=110011101+f(x)*x^3=110011101+100101000=010110101 i=7:c[7]=1,j=7-5 =2 c(x)=010110101+f(x)*x^2=010110101+010010100=000100001 i=6:c[6]=0,c(x)= 000100001
i=5:c[5]=1,c(x)=000100001+100101=000000100
注:本算法的原理如下图所示
这里r(x)=00101,算法中使用f(x)参与计算个人理解应该是为了达到直接消除最高次项的目的,否则要在最后对c(x)和000011111进行按位相与处理,算法的本质是对c(x)进行按位求模运算。下面的算法与此相同。
此算法为第一个算法的优化版,可减少计算过程中的内存消耗,运算过程如下:令c(x)=110011101,f(x)=100101 ,m=5,此处w=1
i=8:c[8]=1,j=8-5=3 c{3}+f(x)=110011+100101=010110 c(x)=010110101
i=7:c[7]=1,j=7-5 =2 c{2}+f(x)=0101101+100101=0001000 c(x)=000100001
i=6:c[6]=0,c(x)=000100001
i=5:c[5]=1, j=5-5=0 c{0}+f(x)= 000100001+ 100101= 000000100 c(x)= 000000100