specialized (much faster) method to compute elliptic-curve division field over finite fields #41563
+192
−63
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The current general implementation of
.division_field()works by constructing the splitting field of the division polynomial (and then some).In this patch, we implement two much faster algorithms for finite base fields: One for supersingular curves, based on the fact that Frobenius acts as a scalar after taking an extension of degree
O(1), and one for ordinary curves, which is due to Van Tuyl.Example (supersingular):
Sage 10.8:
CPU times: user 6.73 s, sys: 1.96 ms, total: 6.73 sThis branch:
CPU times: user 29.9 ms, sys: 1.93 ms, total: 31.8 msExample (ordinary):
Sage 10.8:
CPU times: user 7.5 s, sys: 1.03 ms, total: 7.5 sThis branch:
CPU times: user 126 ms, sys: 5.93 ms, total: 132 msAs a byproduct, this leads to massive speedups in many other algorithms where
.division_field()is used. For example:Sage 10.8:
CPU times: user 12.5 s, sys: 2.98 ms, total: 12.5 sThis branch:
CPU times: user 461 ms, sys: 0 ns, total: 461 ms