具有复乘法且类数大于1的椭圆曲线构造方法及计算机代数系统实现示例问询
我最近在研究带复乘法的椭圆曲线,有个定理明确说:当椭圆曲线E的j不变量是代数整数时,E具有复乘法。不过我卡在了一个关键点上——怎么构造对应类数大于1的椭圆曲线呢? 另外有没有大佬能给几个用主流计算机代数系统(比如Magma、PARI/GP、SageMath)构造这类曲线的实操例子呀?
部分类数>1的虚二次域对应的j不变量参考
$$
\begin{align*}
j(\sqrt{-10}>!)
&=6^3 (65 + 27\sqrt{5}>!)^3\
j(\sqrt{-14}>!)
&=2^3\Big(323+228 \sqrt{2}+(59+43\sqrt{2}) \sqrt{\small{7+14\sqrt{2}},},\Big)^3\
j\Big({\small\frac{1+\sqrt{-15}}{2}}\Big)&=-33\Big({\small\frac{1+\sqrt{5}}{2}}\Big)2(5+4\sqrt{5}>!)^3\
j(\sqrt{-23}>!)
&=\Big(\frac{23035}{3}+\frac{5(18279-1075 \sqrt{69}>!)\sqrt[3]{{\small108+12\sqrt{69}}}}{36}\
&\qquad\qquad\qquad+\frac{5(18279+1075 \sqrt{69}>!) \sqrt[3]{{\small108-12\sqrt{69}},}}{36}\Big)^3\
\end{align*}
$$
主流计算机代数系统实现示例
1. Magma 实现
Magma有专门处理复乘法椭圆曲线的内置函数,直接指定虚二次域就能生成对应曲线:
// 构造虚二次域Q(sqrt(-10)) K := QuadraticField(-10); // 生成该域对应的带复乘法的椭圆曲线 E := EllipticCurveWithCM(K); // 输出曲线方程和j不变量 print("椭圆曲线方程:", E); print("对应的j不变量:", JInvariant(E));
2. PARI/GP 实现
在PARI/GP中,我们可以先计算目标虚二次域的j不变量,再以此构造椭圆曲线:
// 计算判别式为-15的虚二次域的j不变量(对应类数>1) j_val = bnfjclass(-15); // 用j不变量初始化椭圆曲线 E = ellinit(j_val); // 输出曲线信息 print("椭圆曲线:"); E
3. SageMath 实现
SageMath提供了直接从CM判别式生成椭圆曲线的便捷接口:
# 生成对应判别式-23的带复乘法椭圆曲线(类数>1) E = EllipticCurve_from_cm_discriminant(-23) # 打印曲线方程和j不变量 print("椭圆曲线方程:", E) print("对应的j不变量:", E.j_invariant())
备注:内容来源于stack exchange,提问作者D.Matthew

