假设我有多项式f(x) = x^n + x + a
。
我为n
设置了一个值,并想要0 <= a <= A
,其中A
是我设置的其他值。这意味着我将总共拥有A
个不同的多项式,因为a
可以是0
和A
之间的任何值。
使用Sage,我想找到这些A
多项式的可约数。例如,假设我设置了n=2
和A=10^6
。我希望能够确定这些10^6
多项式中有多少是可约的。我可以在构建Sage流程方面获得帮助吗? 注意: Sage有is_irreducible()
方法,但是我不知道如何在这里应用它,因为我有很多多项式可以调用该方法。
最初,我只是想循环A
次并增加计数,但是我觉得必须有一种更有效的方法来做到这一点?如果我采用这种方式,那么我需要10 ^ 6这样的大A值将花费很长时间。
答案 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倍。