# SageMath code for working with elliptic curve 2304.a2 # Define the curve: E = EllipticCurve([0, 0, 0, 18, 0]) # Simplified equation: E.short_weierstrass_model() # Mordell-Weil generators: E.gens() # Torsion subgroup: E.torsion_subgroup().gens() # Integral points: E.integral_points() # Conductor: E.conductor().factor() # Discriminant: E.discriminant().factor() # j-invariant: E.j_invariant().factor() # Potential complex multiplication: E.has_cm() # Mordell-Weil rank: E.rank() # Analytic rank: E.analytic_rank() # Regulator: E.regulator() # Real Period: E.period_lattice().omega() # Tamagawa numbers: E.tamagawa_numbers() # Torsion order: E.torsion_order() # Order of Sha: E.sha().an_numerical() # Special L-value: r = E.rank(); E.lseries().dokchitser().derivative(1,r)/r.factorial() # BSD formula: # self-contained SageMath code snippet for the BSD formula (checks rank, computes analytic sha) E = EllipticCurve([0, 0, 0, 18, 0]); r = E.rank(); ar = E.analytic_rank(); assert r == ar; Lr1 = E.lseries().dokchitser().derivative(1,r)/r.factorial(); sha = E.sha().an_numerical(); omega = E.period_lattice().omega(); reg = E.regulator(); tam = E.tamagawa_product(); tor = E.torsion_order(); assert r == ar; print("analytic sha: " + str(RR(Lr1) * tor^2 / (omega * reg * tam))) # q-expansion of modular form: E.q_eigenform(20) # Modular degree: E.modular_degree() # Local data: E.local_data() # Mod p Galois image: rho = E.galois_representation(); [rho.image_type(p) for p in rho.non_surjective()]