python 有限域函数库_有限域(4)——程序实现有限域的运算

版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址

http://www.cnblogs.com/Colin-Cai/p/9652019.html

作者:窗户

QQ/微信:6679072

E-mail:6679072@qq.com

前一章,我们知道了使用素域的多项式环的商环构造任意的有限域的方法。这一章里,我们就用程序实现任意有限域里的运算。

我在这里还是同第一章一样,选择用Scheme来描述。

数据表示

首先,我们需要的一个参数就是域的特征,记为 p

根据上章分析,我们还需要一个不可分多项式,称为生成多项式,记为 poly

上一章还有一个重要结论是,如果poly的次数是n, 那么所有的次数小于n的多项式共计pn个,分别属于不同的商集,除此之外并无其他商集,那么也就对应着最后的域的元。

所以,我们这里就以这pn个小于n次的多项式来代表该域的所有元,这种表示是合理的。

现在,我们来考虑不可分多项式以及域里每个元的计法:

我们用一个长度为n+1的list来记录生成多项式poly就可以了(n次多项式一共n+1个系数),这个list的第0项、第1项、...第n-1项、第n项分别对应着poly的n次系数、n-1次系数、...1次系数、0次系数(常数项)。比如,特征2素域下的3次不可分多项式 x3+x+1,记作(1  0 1 1)。

而对于每个域里的元,我们也用上述的写法来记,只是,我们把这个多项式补齐成n-1次,没有的项系数都为0,比如在2特征、生成多项式x3+x+1的域下,元[x+1]记为(0 1 1),也就是一个域下所有的元,记录成list都是生成多项式的次数这么长。

函数定义

我们再来定义函数接口,我们就这样去表示有限域里的加减乘除:

(add poly p a b) 代表p特征、生成多项式为poly时,a+b

(sub poly p a b) 代表p特征、生成多项式为poly时,a-b

(mul poly p a b) 代表p特征、生成多项式为poly时,a*b

(div poly p a b) 代表p特征、生成多项式为poly时,a/b

当然,除法涉及到求逆,

(inv poly p a) 代表p特征、生成多项式为poly时,a的逆

程序设计

有了上述准备,再来看第一章的素域里的加减乘除:

;加法

(define (addp p a b)

(if (>= (+ a b) p) (- (+a b) p)

(+a b)

)

)

;减法

(define (

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值