![]() | 1 | initial version |
Let a+bi be a prime in Z[i]. We can multiply it with ±1 to have a≥0. Also, we can pass to the conjugate to have also the case b≥0. After these norming steps, 0≤a,b. In case a<b, one="" can="" multiply="" with="" i="" and="" renorm.="" so="" we="" are="" searching="" for="" primes="" of="" the="" form="" a+ib="" where="" 0≤=""b≤=""a.="" <="" p="">
Warming-up: It is simple to see if a number in Z[i] is prime or not. Dialog with the sage interpreter:
sage: K.<j> = QuadraticField( -1 )
sage: K(2018 + 2019*j).factor()
(-1) * (86*j - 139) * (-6*j - 5) * (-j - 2)
sage: K(2017).factor()
(-9*j - 44) * (9*j - 44)
sage: 2020.next_prime()
2027
sage: K(2027).factor()
2027
sage: K(2027).is_prime()
True
sage: K(1+8*j).factor()
(-3*j - 2) * (-j - 2)
sage: K(1+8*j).is_prime()
False
sage: K(-7+8*j).factor()
(j) * (7*j + 8)
sage: K(-7+8*j).is_prime()
True
To collect now all "normed" primes of the given shape with "real" and "imaginary" part up to a given bound we can try:
K.<j> = QuadraticField( -1 )
BOUND = 40
my_primes = []
for a in xrange( BOUND/8 ):
for b in xrange( 1+8*a+1 ):
p = 1 + 8*a + b*j
if p.is_prime():
my_primes.append(p)
for p in my_primes:
print p
Above, there is a "decent bound", so i can print here the results:
j + 1
4*j + 9
2*j + 17
8*j + 17
10*j + 17
12*j + 17
4*j + 25
6*j + 25
12*j + 25
14*j + 25
16*j + 25
22*j + 25
24*j + 25
2*j + 33
8*j + 33
20*j + 33
28*j + 33
32*j + 33
![]() | 2 | No.2 Revision |
Let a+bi be a prime in Z[i]. We can multiply it with ±1 to have a≥0. Also, we can pass to the conjugate to have also the case b≥0. After these norming steps, 0≤a,b. In case a<b, one="" can="" multiply="" with="" i="" and="" renorm.="" so="" we="" are="" searching="" for="" primes="" of="" the="" form="" a+ib="" where="" 0≤=""b≤=""a.="" <="" p="">
a<b, one can multiply with i and renorm. So we are searching for primes of the form a+ib where 0≤b≤a.
Warming-up: It is simple to see if a number in Z[i] is prime or not. Dialog with the sage interpreter:
sage: K.<j> = QuadraticField( -1 )
sage: K(2018 + 2019*j).factor()
(-1) * (86*j - 139) * (-6*j - 5) * (-j - 2)
sage: K(2017).factor()
(-9*j - 44) * (9*j - 44)
sage: 2020.next_prime()
2027
sage: K(2027).factor()
2027
sage: K(2027).is_prime()
True
sage: K(1+8*j).factor()
(-3*j - 2) * (-j - 2)
sage: K(1+8*j).is_prime()
False
sage: K(-7+8*j).factor()
(j) * (7*j + 8)
sage: K(-7+8*j).is_prime()
True
To collect now all "normed" primes of the given shape with "real" and "imaginary" part up to a given bound we can try:
K.<j> = QuadraticField( -1 )
BOUND = 40
my_primes = []
for a in xrange( BOUND/8 ):
for b in xrange( 1+8*a+1 ):
p = 1 + 8*a + b*j
if p.is_prime():
my_primes.append(p)
for p in my_primes:
print p
Above, there is a "decent bound", so i can print here the results:
j + 1
4*j + 9
2*j + 17
8*j + 17
10*j + 17
12*j + 17
4*j + 25
6*j + 25
12*j + 25
14*j + 25
16*j + 25
22*j + 25
24*j + 25
2*j + 33
8*j + 33
20*j + 33
28*j + 33
32*j + 33