Small primes of degree one¶
Iterator for finding several primes of absolute degree one of a number field of small prime norm.
ALGORITHM:
Let
Let
We know that
Warning
It is possible that there are no primes of
Todo
There are situations when this will fail. There are questions of finding primes of relative degree one. There are questions of finding primes of exact degree larger than one. In short, if you can contribute, please do!
EXAMPLES:
sage: x = ZZ['x'].gen()
sage: F.<a> = NumberField(x^2 - 2)
sage: Ps = F.primes_of_degree_one_list(3)
sage: Ps # random
[Fractional ideal (2*a + 1), Fractional ideal (-3*a + 1), Fractional ideal (-a + 5)]
sage: [ P.norm() for P in Ps ] # random
[7, 17, 23]
sage: all(ZZ(P.norm()).is_prime() for P in Ps)
True
sage: all(P.residue_class_degree() == 1 for P in Ps)
True
>>> from sage.all import *
>>> x = ZZ['x'].gen()
>>> F = NumberField(x**Integer(2) - Integer(2), names=('a',)); (a,) = F._first_ngens(1)
>>> Ps = F.primes_of_degree_one_list(Integer(3))
>>> Ps # random
[Fractional ideal (2*a + 1), Fractional ideal (-3*a + 1), Fractional ideal (-a + 5)]
>>> [ P.norm() for P in Ps ] # random
[7, 17, 23]
>>> all(ZZ(P.norm()).is_prime() for P in Ps)
True
>>> all(P.residue_class_degree() == Integer(1) for P in Ps)
True
x = ZZ['x'].gen() F.<a> = NumberField(x^2 - 2) Ps = F.primes_of_degree_one_list(3) Ps # random [ P.norm() for P in Ps ] # random all(ZZ(P.norm()).is_prime() for P in Ps) all(P.residue_class_degree() == 1 for P in Ps)
The next two examples are for relative number fields.:
sage: L.<b> = F.extension(x^3 - a)
sage: Ps = L.primes_of_degree_one_list(3)
sage: Ps # random
[Fractional ideal (17, b - 5), Fractional ideal (23, b - 4), Fractional ideal (31, b - 2)]
sage: [ P.absolute_norm() for P in Ps ] # random
[17, 23, 31]
sage: all(ZZ(P.absolute_norm()).is_prime() for P in Ps)
True
sage: all(P.residue_class_degree() == 1 for P in Ps)
True
sage: M.<c> = NumberField(x^2 - x*b^2 + b)
sage: Ps = M.primes_of_degree_one_list(3)
sage: Ps # random
[Fractional ideal (17, c - 2), Fractional ideal (c - 1), Fractional ideal (41, c + 15)]
sage: [ P.absolute_norm() for P in Ps ] # random
[17, 31, 41]
sage: all(ZZ(P.absolute_norm()).is_prime() for P in Ps)
True
sage: all(P.residue_class_degree() == 1 for P in Ps)
True
>>> from sage.all import *
>>> L = F.extension(x**Integer(3) - a, names=('b',)); (b,) = L._first_ngens(1)
>>> Ps = L.primes_of_degree_one_list(Integer(3))
>>> Ps # random
[Fractional ideal (17, b - 5), Fractional ideal (23, b - 4), Fractional ideal (31, b - 2)]
>>> [ P.absolute_norm() for P in Ps ] # random
[17, 23, 31]
>>> all(ZZ(P.absolute_norm()).is_prime() for P in Ps)
True
>>> all(P.residue_class_degree() == Integer(1) for P in Ps)
True
>>> M = NumberField(x**Integer(2) - x*b**Integer(2) + b, names=('c',)); (c,) = M._first_ngens(1)
>>> Ps = M.primes_of_degree_one_list(Integer(3))
>>> Ps # random
[Fractional ideal (17, c - 2), Fractional ideal (c - 1), Fractional ideal (41, c + 15)]
>>> [ P.absolute_norm() for P in Ps ] # random
[17, 31, 41]
>>> all(ZZ(P.absolute_norm()).is_prime() for P in Ps)
True
>>> all(P.residue_class_degree() == Integer(1) for P in Ps)
True
L.<b> = F.extension(x^3 - a) Ps = L.primes_of_degree_one_list(3) Ps # random [ P.absolute_norm() for P in Ps ] # random all(ZZ(P.absolute_norm()).is_prime() for P in Ps) all(P.residue_class_degree() == 1 for P in Ps) M.<c> = NumberField(x^2 - x*b^2 + b) Ps = M.primes_of_degree_one_list(3) Ps # random [ P.absolute_norm() for P in Ps ] # random all(ZZ(P.absolute_norm()).is_prime() for P in Ps) all(P.residue_class_degree() == 1 for P in Ps)
AUTHORS:
Nick Alexander (2008): initial version
David Loeffler (2009): fixed a bug with relative fields
Maarten Derickx (2017): fixed a bug with number fields not generated by an integral element
- class sage.rings.number_field.small_primes_of_degree_one.Small_primes_of_degree_one_iter(field, num_integer_primes=10000, max_iterations=100)[source]¶
Bases:
object
Iterator that finds primes of a number field of absolute degree one and bounded small prime norm.
INPUT:
field
– aNumberField
num_integer_primes
– integer (default: 10000); we try to find primes of absolute norm no greater than thenum_integer_primes
-th prime number. For example, ifnum_integer_primes
is 2, the largest norm found will be 3, since the second prime is 3.max_iterations
– integer (default: 100); we testmax_iterations
integers to find small primes before raisingStopIteration
AUTHOR:
Nick Alexander
- next()[source]¶
Return a prime of absolute degree one of small prime norm.
Raises
StopIteration
if such a prime cannot be easily found.EXAMPLES:
sage: x = QQ['x'].gen() sage: K.<a> = NumberField(x^2 - 3) sage: it = K.primes_of_degree_one_iter() sage: [ next(it) for i in range(3) ] # random [Fractional ideal (2*a + 1), Fractional ideal (-a + 4), Fractional ideal (3*a + 2)]
>>> from sage.all import * >>> x = QQ['x'].gen() >>> K = NumberField(x**Integer(2) - Integer(3), names=('a',)); (a,) = K._first_ngens(1) >>> it = K.primes_of_degree_one_iter() >>> [ next(it) for i in range(Integer(3)) ] # random [Fractional ideal (2*a + 1), Fractional ideal (-a + 4), Fractional ideal (3*a + 2)]
x = QQ['x'].gen() K.<a> = NumberField(x^2 - 3) it = K.primes_of_degree_one_iter() [ next(it) for i in range(3) ] # random