-
Notifications
You must be signed in to change notification settings - Fork 41
Description
It may be fun to extend Math.NumberTheory.Moduli.Jacobi to cover not only quadratic reciprocity, but cubic as well.
Quadratic reciprocity symbol or Jacobi symbol answers the question whether an equation x^2 = n (mod m)
has any solutions. Similarly, cubic residue symbol answers whether x^3 = n (mod m)
has solutions.
The values of Jacobi symbol are units of real integers (+ zero), while the values of cubic symbol are units of Eisenstein integers.
When this will be implemented, we can proceed to modular cubic roots (similar to Math.NumberTheory.Moduli.Sqrt) and eventually solve cubic and quartic modular equations in Math.NumberTheory.Moduli.Equations.
Steps to implement:
-
Define
data CubicSymbol = Zero | Omega | OmegaSquare | One
and definecubicSymbol :: EisensteinInteger -> EisensteinInteger -> CubicSymbol
in accordance to the definition of cubic residue character. -
Define the modular cube root in accordance to one of the algorithms in New Cube Root Algorithm. The API should be designed similar to
Math.NumberTheory.Moduli.Sqrt
. -
Develop an algorithm to solve cubic modular equations (similar to the real case) and implement it as
Math.NumberTheory.Moduli.Equations.solveCubic
. -
Develop an algorithm to solve quartic modular equations (similar to the real case) and implement it as
Math.NumberTheory.Moduli.Equations.solveCubic
.