Eisenstein primes
class Eisenstein(a, b, w = (-1 + sqrt(3).i)/2) {
method norm {
a**2 - a*b + b**2
}
method to_s {
sprintf('%+8.4f%+8.4fi', reals(a + b*w))
}
}
var E = []
for e in (-10..10 ~X -10..10 -> map_2d {|x,y| Eisenstein(x,y) }) {
var c = [e.a,e.b].map{.abs}.max
if (
((0 ~~ [e.a, e.b]) || (e.a == e.b)) ?
(c.is_congruent(2,3) && c.is_prime) : e.norm.is_prime
) {
E << e
}
}
E.sort_by { .norm }.first(100).slices(4).each {|s|
say s.join(' ')
}Output:
Last updated
Was this helpful?