Cyclic covers over a finite field#
The most interesting feature is computation of Frobenius matrix on Monsky-Washnitzer cohomology and the Frobenius polynomial.
REFERENCES:
EXAMPLES:
sage: p = 13
sage: x = PolynomialRing(GF(p),"x").gen()
sage: C = CyclicCover(4, x^4 + 1)
sage: C.frobenius_polynomial()
x^6 - 6*x^5 + 3*x^4 + 60*x^3 + 39*x^2 - 1014*x + 2197
sage: R.<t> = PowerSeriesRing(Integers())
sage: C.projective_closure().zeta_series(2,t)
1 + 8*t + 102*t^2 + O(t^3)
sage: C.frobenius_polynomial().reverse()(t)/((1-t)*(1-p*t)) + O(t^5)
1 + 8*t + 102*t^2 + 1384*t^3 + 18089*t^4 + O(t^5)
sage: p = 49999
sage: x = PolynomialRing(GF(p),"x").gen()
sage: CyclicCover(5, x^5 + x).frobenius_polynomial() # long time
x^12 + 299994*x^10 + 37498500015*x^8 + 2499850002999980*x^6 + 93742500224997000015*x^4
+ 1874812507499850001499994*x^2 + 15623125093747500037499700001
sage: CyclicCover(5, 2*x^5 + x).frobenius_polynomial() # long time
x^12 + 299994*x^10 + 37498500015*x^8 + 2499850002999980*x^6 + 93742500224997000015*x^4
+ 1874812507499850001499994*x^2 + 15623125093747500037499700001
sage: p = 107
sage: x = PolynomialRing(GF(p),"x").gen()
sage: CyclicCover(2, x^5 + x).frobenius_matrix()
[ O(107^2) 89*107 + O(107^2) O(107^2) O(107^2)]
[ 89*107 + O(107^2) O(107^2) O(107^2) O(107^2)]
[ O(107^2) O(107^2) O(107^2) 105 + 5*107 + O(107^2)]
[ O(107^2) O(107^2) 89 + 53*107 + O(107^2) O(107^2)]
sage: CyclicCover(2, 3*x^5 + x).frobenius_matrix()
[ O(107^2) 14*107 + O(107^2) O(107^2) O(107^2)]
[ 69*107 + O(107^2) O(107^2) O(107^2) O(107^2)]
[ O(107^2) O(107^2) O(107^2) 61 + 58*107 + O(107^2)]
[ O(107^2) O(107^2) 69 + 53*107 + O(107^2) O(107^2)]
sage: CyclicCover(3, x^3 + x).frobenius_matrix()
[ 0 0 O(107) O(107)]
[ 0 0 52 + O(107) O(107)]
[ O(107) 35 + O(107) 0 0]
[44 + O(107) O(107) 0 0]
sage: CyclicCover(3, 3*x^3 + x).frobenius_matrix()
[ 0 0 O(107) O(107)]
[ 0 0 79 + O(107) O(107)]
[ O(107) 42 + O(107) 0 0]
[30 + O(107) O(107) 0 0]
>>> from sage.all import *
>>> p = Integer(13)
>>> x = PolynomialRing(GF(p),"x").gen()
>>> C = CyclicCover(Integer(4), x**Integer(4) + Integer(1))
>>> C.frobenius_polynomial()
x^6 - 6*x^5 + 3*x^4 + 60*x^3 + 39*x^2 - 1014*x + 2197
>>> R = PowerSeriesRing(Integers(), names=('t',)); (t,) = R._first_ngens(1)
>>> C.projective_closure().zeta_series(Integer(2),t)
1 + 8*t + 102*t^2 + O(t^3)
>>> C.frobenius_polynomial().reverse()(t)/((Integer(1)-t)*(Integer(1)-p*t)) + O(t**Integer(5))
1 + 8*t + 102*t^2 + 1384*t^3 + 18089*t^4 + O(t^5)
>>> p = Integer(49999)
>>> x = PolynomialRing(GF(p),"x").gen()
>>> CyclicCover(Integer(5), x**Integer(5) + x).frobenius_polynomial() # long time
x^12 + 299994*x^10 + 37498500015*x^8 + 2499850002999980*x^6 + 93742500224997000015*x^4
+ 1874812507499850001499994*x^2 + 15623125093747500037499700001
>>> CyclicCover(Integer(5), Integer(2)*x**Integer(5) + x).frobenius_polynomial() # long time
x^12 + 299994*x^10 + 37498500015*x^8 + 2499850002999980*x^6 + 93742500224997000015*x^4
+ 1874812507499850001499994*x^2 + 15623125093747500037499700001
>>> p = Integer(107)
>>> x = PolynomialRing(GF(p),"x").gen()
>>> CyclicCover(Integer(2), x**Integer(5) + x).frobenius_matrix()
[ O(107^2) 89*107 + O(107^2) O(107^2) O(107^2)]
[ 89*107 + O(107^2) O(107^2) O(107^2) O(107^2)]
[ O(107^2) O(107^2) O(107^2) 105 + 5*107 + O(107^2)]
[ O(107^2) O(107^2) 89 + 53*107 + O(107^2) O(107^2)]
>>> CyclicCover(Integer(2), Integer(3)*x**Integer(5) + x).frobenius_matrix()
[ O(107^2) 14*107 + O(107^2) O(107^2) O(107^2)]
[ 69*107 + O(107^2) O(107^2) O(107^2) O(107^2)]
[ O(107^2) O(107^2) O(107^2) 61 + 58*107 + O(107^2)]
[ O(107^2) O(107^2) 69 + 53*107 + O(107^2) O(107^2)]
>>> CyclicCover(Integer(3), x**Integer(3) + x).frobenius_matrix()
[ 0 0 O(107) O(107)]
[ 0 0 52 + O(107) O(107)]
[ O(107) 35 + O(107) 0 0]
[44 + O(107) O(107) 0 0]
>>> CyclicCover(Integer(3), Integer(3)*x**Integer(3) + x).frobenius_matrix()
[ 0 0 O(107) O(107)]
[ 0 0 79 + O(107) O(107)]
[ O(107) 42 + O(107) 0 0]
[30 + O(107) O(107) 0 0]
- class sage.schemes.cyclic_covers.cycliccover_finite_field.CyclicCover_finite_field(AA, r, f, names=None, verbose=0)[source]#
Bases:
CyclicCover_generic
EXAMPLES:
sage: p = 13 sage: x = PolynomialRing(GF(p), "x").gen() sage: C = CyclicCover(4, x^4 + 1) sage: C.frobenius_polynomial() x^6 - 6*x^5 + 3*x^4 + 60*x^3 + 39*x^2 - 1014*x + 2197 sage: R.<t> = PowerSeriesRing(Integers()) sage: C.projective_closure().zeta_series(2,t) 1 + 8*t + 102*t^2 + O(t^3) sage: C.frobenius_polynomial().reverse()(t)/((1-t)*(1-p*t)) + O(t^5) 1 + 8*t + 102*t^2 + 1384*t^3 + 18089*t^4 + O(t^5)
>>> from sage.all import * >>> p = Integer(13) >>> x = PolynomialRing(GF(p), "x").gen() >>> C = CyclicCover(Integer(4), x**Integer(4) + Integer(1)) >>> C.frobenius_polynomial() x^6 - 6*x^5 + 3*x^4 + 60*x^3 + 39*x^2 - 1014*x + 2197 >>> R = PowerSeriesRing(Integers(), names=('t',)); (t,) = R._first_ngens(1) >>> C.projective_closure().zeta_series(Integer(2),t) 1 + 8*t + 102*t^2 + O(t^3) >>> C.frobenius_polynomial().reverse()(t)/((Integer(1)-t)*(Integer(1)-p*t)) + O(t**Integer(5)) 1 + 8*t + 102*t^2 + 1384*t^3 + 18089*t^4 + O(t^5)
- frobenius_matrix(N=None)[source]#
Compute p-adic Frobenius matrix to precision p^N.
If \(N\) not supplied, a default value is selected, which is the minimum needed to recover the charpoly unambiguously.
EXAMPLES:
sage: p = 107 sage: x = PolynomialRing(GF(p), "x").gen() sage: CyclicCover(2, x^5 + x).frobenius_matrix() [ O(107^2) 89*107 + O(107^2) O(107^2) O(107^2)] [ 89*107 + O(107^2) O(107^2) O(107^2) O(107^2)] [ O(107^2) O(107^2) O(107^2) 105 + 5*107 + O(107^2)] [ O(107^2) O(107^2) 89 + 53*107 + O(107^2) O(107^2)] sage: CyclicCover(2, 3*x^5 + x).frobenius_matrix() [ O(107^2) 14*107 + O(107^2) O(107^2) O(107^2)] [ 69*107 + O(107^2) O(107^2) O(107^2) O(107^2)] [ O(107^2) O(107^2) O(107^2) 61 + 58*107 + O(107^2)] [ O(107^2) O(107^2) 69 + 53*107 + O(107^2) O(107^2)] sage: CyclicCover(3, x^3 + x).frobenius_matrix() [ 0 0 O(107) O(107)] [ 0 0 52 + O(107) O(107)] [ O(107) 35 + O(107) 0 0] [44 + O(107) O(107) 0 0] sage: CyclicCover(3, 3*x^3 + x).frobenius_matrix() [ 0 0 O(107) O(107)] [ 0 0 79 + O(107) O(107)] [ O(107) 42 + O(107) 0 0] [30 + O(107) O(107) 0 0]
>>> from sage.all import * >>> p = Integer(107) >>> x = PolynomialRing(GF(p), "x").gen() >>> CyclicCover(Integer(2), x**Integer(5) + x).frobenius_matrix() [ O(107^2) 89*107 + O(107^2) O(107^2) O(107^2)] [ 89*107 + O(107^2) O(107^2) O(107^2) O(107^2)] [ O(107^2) O(107^2) O(107^2) 105 + 5*107 + O(107^2)] [ O(107^2) O(107^2) 89 + 53*107 + O(107^2) O(107^2)] >>> CyclicCover(Integer(2), Integer(3)*x**Integer(5) + x).frobenius_matrix() [ O(107^2) 14*107 + O(107^2) O(107^2) O(107^2)] [ 69*107 + O(107^2) O(107^2) O(107^2) O(107^2)] [ O(107^2) O(107^2) O(107^2) 61 + 58*107 + O(107^2)] [ O(107^2) O(107^2) 69 + 53*107 + O(107^2) O(107^2)] >>> CyclicCover(Integer(3), x**Integer(3) + x).frobenius_matrix() [ 0 0 O(107) O(107)] [ 0 0 52 + O(107) O(107)] [ O(107) 35 + O(107) 0 0] [44 + O(107) O(107) 0 0] >>> CyclicCover(Integer(3), Integer(3)*x**Integer(3) + x).frobenius_matrix() [ 0 0 O(107) O(107)] [ 0 0 79 + O(107) O(107)] [ O(107) 42 + O(107) 0 0] [30 + O(107) O(107) 0 0]
- frobenius_polynomial()[source]#
Return the characteristic polynomial of Frobenius.
EXAMPLES:
Hyperelliptic curves:
sage: p = 11 sage: x = PolynomialRing(GF(p), "x").gen() sage: f = x^7 + 4*x^2 + 10*x + 4 sage: CyclicCover(2, f).frobenius_polynomial() == \ ....: HyperellipticCurve(f).frobenius_polynomial() True sage: f = 2*x^5 + 4*x^3 + x^2 + 2*x + 1 sage: CyclicCover(2, f).frobenius_polynomial() == \ ....: HyperellipticCurve(f).frobenius_polynomial() True sage: f = 2*x^6 + 4*x^4 + x^3 + 2*x^2 + x sage: CyclicCover(2, f).frobenius_polynomial() == \ ....: HyperellipticCurve(f).frobenius_polynomial() True sage: p = 1117 sage: x = PolynomialRing(GF(p), "x").gen() sage: f = x^9 + 4*x^2 + 10*x + 4 sage: P1 = CyclicCover(2, f).frobenius_polynomial() sage: P2 = HyperellipticCurve(f).frobenius_polynomial() sage: P1 == P2 # long time True sage: f = 2*x^5 + 4*x^3 + x^2 + 2*x + 1 sage: CyclicCover(2, f).frobenius_polynomial() == \ ....: HyperellipticCurve(f).frobenius_polynomial() True
>>> from sage.all import * >>> p = Integer(11) >>> x = PolynomialRing(GF(p), "x").gen() >>> f = x**Integer(7) + Integer(4)*x**Integer(2) + Integer(10)*x + Integer(4) >>> CyclicCover(Integer(2), f).frobenius_polynomial() == HyperellipticCurve(f).frobenius_polynomial() True >>> f = Integer(2)*x**Integer(5) + Integer(4)*x**Integer(3) + x**Integer(2) + Integer(2)*x + Integer(1) >>> CyclicCover(Integer(2), f).frobenius_polynomial() == HyperellipticCurve(f).frobenius_polynomial() True >>> f = Integer(2)*x**Integer(6) + Integer(4)*x**Integer(4) + x**Integer(3) + Integer(2)*x**Integer(2) + x >>> CyclicCover(Integer(2), f).frobenius_polynomial() == HyperellipticCurve(f).frobenius_polynomial() True >>> p = Integer(1117) >>> x = PolynomialRing(GF(p), "x").gen() >>> f = x**Integer(9) + Integer(4)*x**Integer(2) + Integer(10)*x + Integer(4) >>> P1 = CyclicCover(Integer(2), f).frobenius_polynomial() >>> P2 = HyperellipticCurve(f).frobenius_polynomial() >>> P1 == P2 # long time True >>> f = Integer(2)*x**Integer(5) + Integer(4)*x**Integer(3) + x**Integer(2) + Integer(2)*x + Integer(1) >>> CyclicCover(Integer(2), f).frobenius_polynomial() == HyperellipticCurve(f).frobenius_polynomial() True
Superelliptic curves:
sage: p = 11 sage: x = PolynomialRing(GF(p), "x").gen() sage: CyclicCover(3, x^4 + 4*x^3 + 9*x^2 + 3*x + 1).frobenius_polynomial() x^6 + 21*x^4 + 231*x^2 + 1331 sage: CyclicCover(4, x^3 + x + 1).frobenius_polynomial() x^6 + 2*x^5 + 11*x^4 + 121*x^2 + 242*x + 1331 sage: p = 4999 sage: x = PolynomialRing(GF(p),"x").gen() sage: CyclicCover(4, x^3 - 1).frobenius_polynomial() == \ ....: CyclicCover(3, x^4 + 1).frobenius_polynomial() True sage: CyclicCover(3, x^4 + 4*x^3 + 9*x^2 + 3*x + 1).frobenius_polynomial() x^6 + 180*x^5 + 20988*x^4 + 1854349*x^3 + 104919012*x^2 + 4498200180*x + 124925014999 sage: CyclicCover(4, x^5 + x + 1).frobenius_polynomial() x^12 - 64*x^11 + 5018*x^10 - 488640*x^9 + 28119583*x^8 - 641791616*x^7 + 124245485932*x^6 - 3208316288384*x^5 + 702708407289583*x^4 - 61043359329111360*x^3 + 3133741752599645018*x^2 - 199800079984001599936*x + 15606259372500374970001 sage: h = PolynomialRing(GF(1129), 'x')([-1] + [0]*(5-1) + [1]) sage: CyclicCover(11, h).frobenius_polynomial() # long time x^40 + 7337188909826596*x^30 + 20187877911930897108199045855206*x^20 + 24687045654725446027864774006541463602997309796*x^10 + 11320844849639649951608809973589776933203136765026963553258401 sage: h = PolynomialRing(GF(1009^2), 'x')([-1] + [0]*(5-1) + [1]) sage: CyclicCover(3, h).frobenius_polynomial() # long time x^8 + 532*x^7 - 2877542*x^6 - 242628176*x^5 + 4390163797795*x^4 - 247015136050256*x^3 - 2982540407204025062*x^2 + 561382189105547134612*x + 1074309286591662654798721
>>> from sage.all import * >>> p = Integer(11) >>> x = PolynomialRing(GF(p), "x").gen() >>> CyclicCover(Integer(3), x**Integer(4) + Integer(4)*x**Integer(3) + Integer(9)*x**Integer(2) + Integer(3)*x + Integer(1)).frobenius_polynomial() x^6 + 21*x^4 + 231*x^2 + 1331 >>> CyclicCover(Integer(4), x**Integer(3) + x + Integer(1)).frobenius_polynomial() x^6 + 2*x^5 + 11*x^4 + 121*x^2 + 242*x + 1331 >>> p = Integer(4999) >>> x = PolynomialRing(GF(p),"x").gen() >>> CyclicCover(Integer(4), x**Integer(3) - Integer(1)).frobenius_polynomial() == CyclicCover(Integer(3), x**Integer(4) + Integer(1)).frobenius_polynomial() True >>> CyclicCover(Integer(3), x**Integer(4) + Integer(4)*x**Integer(3) + Integer(9)*x**Integer(2) + Integer(3)*x + Integer(1)).frobenius_polynomial() x^6 + 180*x^5 + 20988*x^4 + 1854349*x^3 + 104919012*x^2 + 4498200180*x + 124925014999 >>> CyclicCover(Integer(4), x**Integer(5) + x + Integer(1)).frobenius_polynomial() x^12 - 64*x^11 + 5018*x^10 - 488640*x^9 + 28119583*x^8 - 641791616*x^7 + 124245485932*x^6 - 3208316288384*x^5 + 702708407289583*x^4 - 61043359329111360*x^3 + 3133741752599645018*x^2 - 199800079984001599936*x + 15606259372500374970001 >>> h = PolynomialRing(GF(Integer(1129)), 'x')([-Integer(1)] + [Integer(0)]*(Integer(5)-Integer(1)) + [Integer(1)]) >>> CyclicCover(Integer(11), h).frobenius_polynomial() # long time x^40 + 7337188909826596*x^30 + 20187877911930897108199045855206*x^20 + 24687045654725446027864774006541463602997309796*x^10 + 11320844849639649951608809973589776933203136765026963553258401 >>> h = PolynomialRing(GF(Integer(1009)**Integer(2)), 'x')([-Integer(1)] + [Integer(0)]*(Integer(5)-Integer(1)) + [Integer(1)]) >>> CyclicCover(Integer(3), h).frobenius_polynomial() # long time x^8 + 532*x^7 - 2877542*x^6 - 242628176*x^5 + 4390163797795*x^4 - 247015136050256*x^3 - 2982540407204025062*x^2 + 561382189105547134612*x + 1074309286591662654798721
A non-monic example checking that Issue #29015 is fixed:
sage: a = 3 sage: K.<s> = GF(83^3); sage: R.<x> = PolynomialRing(K) sage: h = s*x^4 + x*3 + 8 sage: C = CyclicCover(a, h) sage: C.frobenius_polynomial() x^6 + 1563486*x^4 + 893980969482*x^2 + 186940255267540403
>>> from sage.all import * >>> a = Integer(3) >>> K = GF(Integer(83)**Integer(3), names=('s',)); (s,) = K._first_ngens(1); >>> R = PolynomialRing(K, names=('x',)); (x,) = R._first_ngens(1) >>> h = s*x**Integer(4) + x*Integer(3) + Integer(8) >>> C = CyclicCover(a, h) >>> C.frobenius_polynomial() x^6 + 1563486*x^4 + 893980969482*x^2 + 186940255267540403
Non-superelliptic curves:
sage: p = 13 sage: x = PolynomialRing(GF(p), "x").gen() sage: C = CyclicCover(4, x^4 + 1) sage: C.frobenius_polynomial() x^6 - 6*x^5 + 3*x^4 + 60*x^3 + 39*x^2 - 1014*x + 2197 sage: R.<t> = PowerSeriesRing(Integers()) sage: C.projective_closure().zeta_series(2, t) 1 + 8*t + 102*t^2 + O(t^3) sage: C.frobenius_polynomial().reverse()(t)/((1-t)*(1-p*t)) + O(t^5) 1 + 8*t + 102*t^2 + 1384*t^3 + 18089*t^4 + O(t^5) sage: x = PolynomialRing(GF(11), "x").gen() sage: CyclicCover(4, x^6 - 11*x^3 + 70*x^2 - x + 961).frobenius_polynomial() # long time x^14 + 14*x^12 + 287*x^10 + 3025*x^8 + 33275*x^6 + 381997*x^4 + 2254714*x^2 + 19487171 sage: x = PolynomialRing(GF(4999), "x").gen() sage: CyclicCover(4, x^6 - 11*x^3 + 70*x^2 - x + 961).frobenius_polynomial() # long time x^14 - 4*x^13 - 2822*x^12 - 30032*x^11 + 37164411*x^10 - 152369520*x^9 + 54217349361*x^8 - 1021791160888*x^7 + 271032529455639*x^6 - 3807714457169520*x^5 + 4642764601604000589*x^4 - 18754988504199390032*x^3 - 8809934776794570547178*x^2 - 62425037490001499880004*x + 78015690603129374475034999 sage: p = 11 sage: x = PolynomialRing(GF(p), "x").gen() sage: CyclicCover(3, 5*x^3 - 5*x + 13).frobenius_polynomial() x^2 + 11 sage: CyclicCover(3, x^6 + x^4 - x^3 + 2*x^2 - x - 1).frobenius_polynomial() x^8 + 32*x^6 + 462*x^4 + 3872*x^2 + 14641 sage: p = 4999 sage: x = PolynomialRing(GF(p), "x").gen() sage: CyclicCover(3, 5*x^3 - 5*x + 13).frobenius_polynomial() x^2 - 47*x + 4999 sage: CyclicCover(3, x^6 + x^4 - x^3 + 2*x^2 - x - 1).frobenius_polynomial() x^8 + 122*x^7 + 4594*x^6 - 639110*x^5 - 82959649*x^4 - 3194910890*x^3 + 114804064594*x^2 + 15240851829878*x + 624500149980001 sage: p = 11 sage: x = PolynomialRing(GF(p), "x").gen() sage: CyclicCover(5, x^5 + x).frobenius_polynomial() # long time x^12 + 4*x^11 + 22*x^10 + 108*x^9 + 503*x^8 + 1848*x^7 + 5588*x^6 + 20328*x^5 + 60863*x^4 + 143748*x^3 + 322102*x^2 + 644204*x + 1771561 sage: CyclicCover(5, 2*x^5 + x).frobenius_polynomial() # long time x^12 - 9*x^11 + 42*x^10 - 108*x^9 - 47*x^8 + 1782*x^7 - 8327*x^6 + 19602*x^5 - 5687*x^4 - 143748*x^3 + 614922*x^2 - 1449459*x + 1771561 sage: p = 49999 sage: x = PolynomialRing(GF(p), "x").gen() sage: CyclicCover(5, x^5 + x).frobenius_polynomial() # long time x^12 + 299994*x^10 + 37498500015*x^8 + 2499850002999980*x^6 + 93742500224997000015*x^4 + 1874812507499850001499994*x^2 + 15623125093747500037499700001 sage: CyclicCover(5, 2*x^5 + x).frobenius_polynomial() # long time x^12 + 299994*x^10 + 37498500015*x^8 + 2499850002999980*x^6 + 93742500224997000015*x^4 + 1874812507499850001499994*x^2 + 15623125093747500037499700001
>>> from sage.all import * >>> p = Integer(13) >>> x = PolynomialRing(GF(p), "x").gen() >>> C = CyclicCover(Integer(4), x**Integer(4) + Integer(1)) >>> C.frobenius_polynomial() x^6 - 6*x^5 + 3*x^4 + 60*x^3 + 39*x^2 - 1014*x + 2197 >>> R = PowerSeriesRing(Integers(), names=('t',)); (t,) = R._first_ngens(1) >>> C.projective_closure().zeta_series(Integer(2), t) 1 + 8*t + 102*t^2 + O(t^3) >>> C.frobenius_polynomial().reverse()(t)/((Integer(1)-t)*(Integer(1)-p*t)) + O(t**Integer(5)) 1 + 8*t + 102*t^2 + 1384*t^3 + 18089*t^4 + O(t^5) >>> x = PolynomialRing(GF(Integer(11)), "x").gen() >>> CyclicCover(Integer(4), x**Integer(6) - Integer(11)*x**Integer(3) + Integer(70)*x**Integer(2) - x + Integer(961)).frobenius_polynomial() # long time x^14 + 14*x^12 + 287*x^10 + 3025*x^8 + 33275*x^6 + 381997*x^4 + 2254714*x^2 + 19487171 >>> x = PolynomialRing(GF(Integer(4999)), "x").gen() >>> CyclicCover(Integer(4), x**Integer(6) - Integer(11)*x**Integer(3) + Integer(70)*x**Integer(2) - x + Integer(961)).frobenius_polynomial() # long time x^14 - 4*x^13 - 2822*x^12 - 30032*x^11 + 37164411*x^10 - 152369520*x^9 + 54217349361*x^8 - 1021791160888*x^7 + 271032529455639*x^6 - 3807714457169520*x^5 + 4642764601604000589*x^4 - 18754988504199390032*x^3 - 8809934776794570547178*x^2 - 62425037490001499880004*x + 78015690603129374475034999 >>> p = Integer(11) >>> x = PolynomialRing(GF(p), "x").gen() >>> CyclicCover(Integer(3), Integer(5)*x**Integer(3) - Integer(5)*x + Integer(13)).frobenius_polynomial() x^2 + 11 >>> CyclicCover(Integer(3), x**Integer(6) + x**Integer(4) - x**Integer(3) + Integer(2)*x**Integer(2) - x - Integer(1)).frobenius_polynomial() x^8 + 32*x^6 + 462*x^4 + 3872*x^2 + 14641 >>> p = Integer(4999) >>> x = PolynomialRing(GF(p), "x").gen() >>> CyclicCover(Integer(3), Integer(5)*x**Integer(3) - Integer(5)*x + Integer(13)).frobenius_polynomial() x^2 - 47*x + 4999 >>> CyclicCover(Integer(3), x**Integer(6) + x**Integer(4) - x**Integer(3) + Integer(2)*x**Integer(2) - x - Integer(1)).frobenius_polynomial() x^8 + 122*x^7 + 4594*x^6 - 639110*x^5 - 82959649*x^4 - 3194910890*x^3 + 114804064594*x^2 + 15240851829878*x + 624500149980001 >>> p = Integer(11) >>> x = PolynomialRing(GF(p), "x").gen() >>> CyclicCover(Integer(5), x**Integer(5) + x).frobenius_polynomial() # long time x^12 + 4*x^11 + 22*x^10 + 108*x^9 + 503*x^8 + 1848*x^7 + 5588*x^6 + 20328*x^5 + 60863*x^4 + 143748*x^3 + 322102*x^2 + 644204*x + 1771561 >>> CyclicCover(Integer(5), Integer(2)*x**Integer(5) + x).frobenius_polynomial() # long time x^12 - 9*x^11 + 42*x^10 - 108*x^9 - 47*x^8 + 1782*x^7 - 8327*x^6 + 19602*x^5 - 5687*x^4 - 143748*x^3 + 614922*x^2 - 1449459*x + 1771561 >>> p = Integer(49999) >>> x = PolynomialRing(GF(p), "x").gen() >>> CyclicCover(Integer(5), x**Integer(5) + x).frobenius_polynomial() # long time x^12 + 299994*x^10 + 37498500015*x^8 + 2499850002999980*x^6 + 93742500224997000015*x^4 + 1874812507499850001499994*x^2 + 15623125093747500037499700001 >>> CyclicCover(Integer(5), Integer(2)*x**Integer(5) + x).frobenius_polynomial() # long time x^12 + 299994*x^10 + 37498500015*x^8 + 2499850002999980*x^6 + 93742500224997000015*x^4 + 1874812507499850001499994*x^2 + 15623125093747500037499700001