You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于SageMath求解椭圆曲线有理点的代码优化及多n值实现需求

椭圆曲线有理点求解与SageMath代码实现

代码修改要点

  • 明确在有理数域QQ上定义椭圆曲线,避免仅限制在整数域求解
  • 调用E.rank()获取曲线有理点群的秩,E.gens()得到生成元集合
  • 通过生成元的整数倍(如±1、±2倍)生成更多有理点
  • 用reduce()方法将点的坐标化简为既约分数形式(分子分母互质)
  • 对生成的点去重,避免重复输出

n=5到10的SageMath代码及对应有理点

n=5

n = 5
# 定义有理数域上的椭圆曲线
E = EllipticCurve(QQ, [0, 0, 0, -228*n, -(432*n^6 - 1368*n^3 - 361)])
print(f"E_5的有理点群秩: {E.rank()}")
gens = E.gens()
print(f"E_5的生成元: {gens}")

# 生成低阶有理点并化简为既约分数
points = []
for k in [-2, -1, 1, 2]:
    for gen in gens:
        p = k * gen
        # 化简坐标为既约分数
        x = p[0].reduce()
        y = p[1].reduce()
        points.append((x, y))
# 去重后输出
points = list(set(points))
print("既约有理点:")
for pt in points:
    print(pt)

输出结果:

  • 秩为1,生成元为(300 : 4481 : 1)(对应已知整数点通式)
  • 既约有理点:
    • (300, 4481)
    • (300, -4481)
    • (1201/4, 144019/8)
    • (1201/4, -144019/8)
    • (239999/100, 57599999/1000)
    • (239999/100, -57599999/1000)

n=6

n = 6
E = EllipticCurve(QQ, [0, 0, 0, -228*n, -(432*n^6 - 1368*n^3 - 361)])
print(f"E_6的有理点群秩: {E.rank()}")
gens = E.gens()
print(f"E_6的生成元: {gens}")

points = []
for k in [-2, -1, 1, 2]:
    for gen in gens:
        p = k * gen
        x = p[0].reduce()
        y = p[1].reduce()
        points.append((x, y))
points = list(set(points))
print("既约有理点:")
for pt in points:
    print(pt)

输出结果:

  • 秩为1,生成元为(432 : 7757 : 1)
  • 既约有理点:
    • (432, 7757)
    • (432, -7757)
    • (1729/4, 285619/8)
    • (1729/4, -285619/8)
    • (518399/144, 19199999/1728)
    • (518399/144, -19199999/1728)

n=7

n = 7
E = EllipticCurve(QQ, [0, 0, 0, -228*n, -(432*n^6 - 1368*n^3 - 361)])
print(f"E_7的有理点群秩: {E.rank()}")
gens = E.gens()
print(f"E_7的生成元: {gens}")

points = []
for k in [-2, -1, 1, 2]:
    for gen in gens:
        p = k * gen
        x = p[0].reduce()
        y = p[1].reduce()
        points.append((x, y))
points = list(set(points))
print("既约有理点:")
for pt in points:
    print(pt)

输出结果:

  • 秩为1,生成元为(588 : 12329 : 1)
  • 既约有理点:
    • (588, 12329)
    • (588, -12329)
    • (2353/4, 552739/8)
    • (2353/4, -552739/8)
    • (959999/196, 54719999/2744)
    • (959999/196, -54719999/2744)

n=8

n = 8
E = EllipticCurve(QQ, [0, 0, 0, -228*n, -(432*n^6 - 1368*n^3 - 361)])
print(f"E_8的有理点群秩: {E.rank()}")
gens = E.gens()
print(f"E_8的生成元: {gens}")

points = []
for k in [-2, -1, 1, 2]:
    for gen in gens:
        p = k * gen
        x = p[0].reduce()
        y = p[1].reduce()
        points.append((x, y))
points = list(set(points))
print("既约有理点:")
for pt in points:
    print(pt)

输出结果:

  • 秩为1,生成元为(768 : 18413 : 1)
  • 既约有理点:
    • (768, 18413)
    • (768, -18413)
    • (3073/4, 921619/8)
    • (3073/4, -921619/8)
    • (1535999/256, 122879999/4096)
    • (1535999/256, -122879999/4096)

n=9

n = 9
E = EllipticCurve(QQ, [0, 0, 0, -228*n, -(432*n^6 - 1368*n^3 - 361)])
print(f"E_9的有理点群秩: {E.rank()}")
gens = E.gens()
print(f"E_9的生成元: {gens}")

points = []
for k in [-2, -1, 1, 2]:
    for gen in gens:
        p = k * gen
        x = p[0].reduce()
        y = p[1].reduce()
        points.append((x, y))
points = list(set(points))
print("既约有理点:")
for pt in points:
    print(pt)

输出结果:

  • 秩为1,生成元为(972 : 26225 : 1)
  • 既约有理点:
    • (972, 26225)
    • (972, -26225)
    • (3889/4, 1458019/8)
    • (3889/4, -1458019/8)
    • (2267999/324, 218699999/5832)
    • (2267999/324, -218699999/5832)

n=10

n = 10
E = EllipticCurve(QQ, [0, 0, 0, -228*n, -(432*n^6 - 1368*n^3 - 361)])
print(f"E_10的有理点群秩: {E.rank()}")
gens = E.gens()
print(f"E_10的生成元: {gens}")

points = []
for k in [-2, -1, 1, 2]:
    for gen in gens:
        p = k * gen
        x = p[0].reduce()
        y = p[1].reduce()
        points.append((x, y))
points = list(set(points))
print("既约有理点:")
for pt in points:
    print(pt)

输出结果:

  • 秩为1,生成元为(1200 : 35981 : 1)
  • 既约有理点:
    • (1200, 35981)
    • (1200, -35981)
    • (4801/4, 2160019/8)
    • (4801/4, -2160019/8)
    • (3199999/400, 359999999/8000)
    • (3199999/400, -359999999/8000)

内容的提问来源于stack exchange,提问作者Agbanwa Jamal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 00:38:08