アイゼンシュタイン素数¶
次のようにおきます。
$$ \omega=\frac{-1+i\sqrt3}{2},\qquad \omega^2+\omega+1=0. $$
アイゼンシュタイン整数は $\mathbb Z[\omega]$ の元です。そのノルムは 次のように表されます。
$$ N(a+b\omega) =(a+b\omega)(a+b\omega^2) =a^2-ab+b^2. $$
格子の一つの扇形領域を列挙する¶
ここでも、有限領域から正の座標の順序を区別しない対を選びます。三角格子をなす アイゼンシュタイン整数の残りの扇形領域は、六つの単元と共役によってこの領域の 対称なコピーとして得られます。
def eisensteinPoints : [(Integer, Integer)] :=
matchAll take 10 nats as set integer with
| $x :: $y :: _ -> (x, y)
def eisensteinInteger (x : Integer) (y : Integer) : MathValue :=
x + y * w
def eisensteinNorm (x : Integer) (y : Integer) : Integer :=
x ^ 2 - x * y + y ^ 2
def eisensteinNorms : [(MathValue, Integer)] :=
map
(\(x, y) -> (eisensteinInteger x y, eisensteinNorm x y))
eisensteinPoints
定義関係とノルムを確認する¶
$\omega^2+\omega+1=0$ により、以下の出力の第1成分は0になります。 ほかの成分からは、たとえば $1+2\omega$ のノルムが $3$ であることを 確認できます。
(w ^ 2 + w + 1, eisensteinNorm 1 2, take 10 eisensteinNorms)
素数ノルムで絞り込む¶
正の座標をもつこの扇形領域の内部では、整数として得られるノルムが素数ならば アイゼンシュタイン素数だと判定できます。ノルムが1の元 $1+\omega$ は単元なので、 自動的に除外されます。
def eisensteinPrimes : [(MathValue, Integer)] :=
filter (\(_, n) -> isPrime n) eisensteinNorms
take 24 eisensteinPrimes
有理素数は異なる振る舞いをする¶
通常の素数 $p\ne3$ は、$\mathbb Z[\omega]$ において $p\equiv1\pmod3$ のとき 分解し、$p\equiv2\pmod3$ のときは素数のままです。分岐する素数は3であり、 次の分解をもちます。
$$ 3=-\omega^2(1-\omega)^2. $$
その基本因子のノルムは $3$ です。
((1 - w) * (1 - w ^ 2), eisensteinNorm 1 (-1))
まとめ¶
正方格子を三角格子に替えると、ノルムは $a^2+b^2$ から $a^2-ab+b^2$ へ 変わりますが、計算の考え方は同じです。代数的整数を構造的に列挙し、素数判定を $\mathbb Z$ 上の厳密な算術へ移します。