用Sage计算大数域中的最大阶数

时间:2012-08-07 16:39:29

标签: sage

我正在SAGE中编写一个程序,除其他外,必须计算“大”数字字段的最大订单。我正在处理的数字字段不仅具有相当大的学位(到目前为止我必须处理的数字大约为40),而且还具有非常大的判别性。
不幸的是,这使得无法使用SAGE用于计算最大订单的标准内置函数 - 命令K.maximal_order()过于昂贵。让我具体说明下面代码中使用的符号:
Qa12指定具有整数环(即最大阶数)OO的数字字段。需要计算的是OOK的扩展K的最大订单Qa12。 现在,在MAGMA中,可以使用以下代码完成此操作:

subOrderK:=ext<OO | y^2-kappa12>;
subOrderK:=AbsoluteOrder(subOrderK);
D:=Discriminant(subOrderK);
for p in PrimeDivisors(D) do
    subOrderK:=pMaximalOrder(subOrderK,p);
end for;
OOK:=subOrderK;

这在相当短的时间内运行,即一般不到一分钟。 我没有找到直接翻译的方法,因为似乎没有SAGE中前两行代码的模拟。很可能我错过了一些东西,所以如果你认为你确实知道翻译前两行的方法,那么请告诉我。 如果计算字段的扩展名,则代码应如下所示:

K.<c> = Qa12.extension(y^2-kappa12)
K.<alpha> = K.absolute_field()
subOrderK = K.order(alpha)
D = subOrderK.discriminant()
for p in factor(D):
    subOrderK = K.maximal_order(p[0])
OOK = subOrderK

现在,这个代码存在两个问题,第一个问题是所述数字字段的判别是巨大的,将其分解是不可能的。换句话说,我还没有测试过for循环。你有没有办法避免处理这些巨大的歧视? for循环是我不安全的第二个地方:因为(再次 - 据我所知)没有直接模拟上面的MAGMA命令pMaximalOrder(subOrderK,p),我希望SAGE能“记住” for循环中的subOrderK的先前值,因此重新创建MAGMA命令的效果。确实如此吗?如果注意,您是否看到了避免此问题的方法?

注意:
几天前我在ask.sagemath上发布了基本相同的问题,到目前为止无济于事。

0 个答案:

没有答案