SageMath:确定字段中可约多项式数量的最佳方法?

时间:2019-12-17 08:24:36

标签: sage

假设我有多项式f(x) = x^n + x + a。 我为n设置了一个值,并想要0 <= a <= A,其中A是我设置的其他值。这意味着我将总共拥有A个不同的多项式,因为a可以是0A之间的任何值。

使用Sage,我想找到这些A多项式的可约数。例如,假设我设置了n=2A=10^6。我希望能够确定这些10^6多项式中有多少是可约的。我可以在构建Sage流程方面获得帮助吗? 注意: Sage有is_irreducible()方法,但是我不知道如何在这里应用它,因为我有很多多项式可以调用该方法。

最初,我只是想循环A次并增加计数,但是我觉得必须有一种更有效的方法来做到这一点?如果我采用这种方式,那么我需要10 ^ 6这样的大A值将花费很长时间。

1 个答案:

答案 0 :(得分:0)

幼稚的方法:

sage: F = GF(next_prime(10^6))
sage: R.<x> = F[] # replace F with your favorite field
sage: def count(A):
....:     c = 0
....:     for a in range(A):
....:         if not (x^2+x+a).is_irreducible():
....:             c += 1
....:     return c
....: 
sage: count(10^4)
5031
sage: count(10^5)
50066
sage: %time count(10^6)
CPU times: user 13.2 s, sys: 5.15 ms, total: 13.2 s
Wall time: 13.2 s
500000

根据不同的领域,速度可能会有很大的不同。

您还可以向count-def count(A, n=2):添加可选参数,然后将多项式更改为x^n+x+a。使用n=8比使用n=2慢2到3倍。