sage - SageMath:确定字段中可约多项式数量的最佳方法?
问题描述
假设我有多项式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
时间和增加计数,但我觉得必须有一种更有效的方法来做到这一点?如果我这样做,那么我需要的 A 的大值(如 10^6)将需要很长时间。
解决方案
一种天真的方法:
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
。usingn=8
比 using 慢 2 或 3 倍n=2
。
推荐阅读
- java - 在构建字符串并将它们添加到 ArrayList 时出错
- python-3.x - 如何操作嵌套的 GET 调用
- firebase - 如何修复我的 Application.java 以使用新版本的 Firebase_messaging
- c# - 执行 MediatR 请求而不进行查询
- excel - 从 excel 2016 转移到 356
- react-native - 何时再次从 API 检索数据?(令牌)
- react-native - 尝试为我的导航标题添加垂直边距但不起作用以及如何为导航标题添加底线
- javascript - 如何根据屏幕大小替换 HTML 元素?
- django - ForeignKey 更新不会在 Django 在 Postgres 中创建的表上级联
- javascript - Mongoose 在多个数组中填充嵌套元素