在SageMath中从PolynomialRing转换为其他PolynomialRing

时间:2019-05-24 06:38:57

标签: sage

我在SageMath中具有三个代数结构,我想将它们彼此转换

  1. Z(3*7681) mod x^768 - x^384 + 1
  2. Z(7681) mod x^768 - x^384 + 1
  3. Z(3) mod x^768 - x^384 + 1

我想这样做:

  

f = [类型2的对象]

     

f = f ^ -1(f是可逆的)

     

//将f转换为1

     

//用f做一些计算

     

//将f转换为类型3(所有系数为mod 3)

我测试了change_ring函数,并尝试对1至3类使用模运算符。

这是我在Sage中定义字段的方式

R1.<r> = PolynomialRing(IntegerModRing(7681*3), 'r').quotient(x^768 - x^384 + 1)
R2.<s> = PolynomialRing(GF(7681), 's').quotient(x^768 - x^384 + 1)
R3.<t> = PolynomialRing(GF(3), 't').quotient(x^768 - x^384 + 1)

1 个答案:

答案 0 :(得分:0)

定义多项式环的三个商环:

sage: x = polygen(ZZ)
sage: R1.<r> = PolynomialRing(Zmod(7681*3), 'r').quotient(x^768 - x^384 + 1)
sage: R2.<s> = PolynomialRing(GF(7681), 's').quotient(x^768 - x^384 + 1)
sage: R3.<t> = PolynomialRing(GF(3), 't').quotient(x^768 - x^384 + 1)

在R2中定义元素f2:

sage: f2 = 875*s^5 + 5355*s^4 + 6859*s^3 + 3073*s^2 + 2552*s + 1626

将其映射到R1,然后从那里映射到R3:

sage: f1 = R1(f2.list())
sage: f3 = R3(f1.list())

检查结果:

sage: f3
2*t^5 + t^3 + t^2 + 2*t