3.1.2-classgroup.sage 554 B

123456789101112131415161718192021222324252627282930313233
  1. q = 61
  2. K = GF(q)
  3. E = EllipticCurve(K, [8, 1])
  4. P = E(57,24)
  5. Q = E(25,37)
  6. R = E(17,32)
  7. S = E(42,35)
  8. inf = E(0)
  9. D1 = ((1, P), (1, Q), (1, R))
  10. D2 = ((4, inf), (-1, S))
  11. # D1 ~ D2 <=> D1 = D2 + div(f)
  12. # sum(div(f)) = O, deg(div(f)) = 0
  13. def dsum(D):
  14. P = inf
  15. for order, pnt in D:
  16. P += order * pnt
  17. return P
  18. def degree(D):
  19. return sum(order for order, _ in D)
  20. def neg(D):
  21. return tuple((-order, pnt) for order, pnt in D)
  22. # This means D1 ~ D2 because D1 - D2 ∈ Pic(E)
  23. D = D1 + neg(D2)
  24. assert degree(D) == 0
  25. assert dsum(D) == inf