# list Gaussian prime alpha with | alpha | < K
K = 100
i = sqrt(-1)
prime = [n for n in [2,..,K] if is_prime(n)]
GP = [p + 0*i for p in prime if p%4==3]
GP.append(1+i)
for a in [2,3,..,K]:
for b in [1,2,..,a-1]:
N = a^2 + b^2
if is_prime(N) and N< K^2:
GP.append(a+b*i)
list_plot(GP).show(xmin=0,ymin=0,xmax=K,ymax=K)
According to the def, Gaussian primes correspondence to rational primes uniquely
I = sqrt(-1)
GP=[1+I]
N=10^4
for p in prime_range(3,N):
if p%4==3:
c.append(p)
else:
for a in [ceil(sqrt(p/2))..ceil(sqrt(p))]:
b = p - a^2
if is_square(b):
GP.append(a+sqrt(b)*I)
break
twin = []
for pi in GP:
if pi + (1+ I) in GP:
twin.append(pi)
print pi ,"&", pi + (1+ I)
here, we call pi and pi + (1+ i) are twin if
they are Gaussian primes