was@form:~$ cd 168/notes/2005-10-17 was@form:~/168/notes/2005-10-17$ sage ------------------------------------------------------------------------ SAGE Version 0.7.13, Export Date: 2005-10-17-0407 Distributed under the terms of the GNU General Public License (GPL) IPython shell -- for help type ?, ??, %magic, or help ------------------------------------------------------------------------ sage: (3/2)^2 + (20/3)^2 _1 = 1681/36 sage: (41/6)^2 _2 = 1681/36 sage: attach "cong.sage" sage: E = congru congruent_curve_gens congruent_triangle sage: E = cong_num cong_number_curve cong_number_sets sage: E = cong_number_curve(5) sage: E _5 = Elliptic Curve defined by y^2 = x^3 - 25*x over Rational Field sage: G = E.gens() sage: G _7 = [(-4, 6)] sage: P = G[0] sage: P _9 = (-4, 6) sage: congrue congruent_curve_gens congruent_triangle sage: congruent_triangle(P) _10 = (3/2, 20/3, 41/6) sage: 2*P _11 = (1681/144, -62279/1728) sage: congruent_triangle(2*P) _12 = (1519/492, 4920/1519, -3344161/747348) sage: a,b,c = _12 sage: a _14 = 1519/492 sage: b _15 = 4920/1519 sage: c _16 = -3344161/747348 sage: a^2 + b^2 == c^2 _17 = True sage: a*b/2 _18 = 5 sage: a,b,c _19 = (1519/492, 4920/1519, -3344161/747348) sage: a,b,c=congruent_triangle(5*P) sage: a _21 = -394091011800472369443/63458283116489076790 sage: b _22 = -634582831164890767900/394091011800472369443 sage: c _23 = -160443526614433014168714029147613242401001/25008339000498013289668468371318876527970 sage: E _24 = Elliptic Curve defined by y^2 = x^3 - 25*x over Rational Field sage: factor(conductor(E)) _25 = 2^5 * 5^2 sage: cong_nu cong_number_curve cong_number_sets sage: cong_number_sets? Type: function Base Class: String Form: Namespace: Interactive File: /home/was/edu/fall05/168/notes/2005-10-17/cong.sage.py Definition: cong_number_sets(n) Docstring: Given a positive integer n, returns the two sets appearing in the conjectural criterion for when a number is congruent. sage: cong_number_sets(6) _27 = ([], []) sage: cong_number_sets(5) _28 = ([], []) sage: S1, S2 = cong_number_sets(7) sage: S1 _30 = [] sage: S2 _31 = [] sage: S1, S2 = cong_number_sets(100) sage: S1 _33 = [(0, 1, 0)] sage: S2 _34 = [] sage: S1, S2 = cong_number_sets(1) sage: S1 _36 = [(0, 1, 0)] sage: S2 _37 = [] sage: S1, S2 = cong_number_sets(103) sage: S1 _39 = [] sage: S2 _40 = [] sage: E = con conductor cong_number_sets cong.sage congruent_curve_gens cong.sage.aux congruent_triangle cong.sage.dvi conj_congruent_number_list cong.sage.log continue cong.sage.pdf continued_fraction cong.sage.ps convergent cong.sage.py convergents cong.sage.tex conway_polynomial cong_number_curve sage: E = cong_nu cong_number_curve cong_number_sets sage: E = cong_number_curve(103) sage: E _42 = Elliptic Curve defined by y^2 = x^3 - 10609*x over Rational Field sage: G = E.gens() sage: G _44 = [(-777848715219380607/8780605285453456, 406939902409963977921570495/822785599723202981879104)] sage: P = G[0] sage: P _46 = (-777848715219380607/8780605285453456, 406939902409963977921570495/822785599723202981879104) sage: congru congruent_curve_gens congruent_triangle sage: congruent_triangle(P) _47 = (45463628564396045/8143126555471908, 16286253110943816/441394452081515, 134130664938047228374702001079697/3594330884182957394223708580620) sage: congruent_triangle(2*P) _48 = (17185634719391093727634843473743585469340755051722944799891950559/964219983005638593080701999601243903601008247213261446739344280, 198629316499161550174624611917856244141807698925931858028304921680/17185634719391093727634843473743585469340755051722944799891950559, -352008659948220111075691074151631552714265844032730144831000926906517193179085542508749236648581510050936484589962917565740092481/16570732417072392965427706076087110093738148708575603533511700446069960034049208047977307349747461389650861475528706577839452520) sage: S1, S2 = cong_number_sets(541) sage: S1 _50 = [] sage: S2 _51 = [] sage: v = [n for n in range(1,200) if is_conj_congruent_number(n)] sage: print v [5, 6, 7, 13, 14, 15, 20, 21, 22, 23, 24, 28, 29, 30, 31, 34, 37, 38, 39, 41, 45, 46, 47, 52, 53, 54, 55, 56, 60, 61, 62, 63, 65, 69, 70, 71, 77, 78, 79, 80, 84, 85, 86, 87, 88, 92, 93, 94, 95, 96, 101, 102, 103, 109, 110, 111, 112, 116, 117, 118, 119, 120, 124, 125, 126, 127, 133, 134, 135, 136, 137, 138, 141, 142, 143, 145, 148, 149, 150, 151, 152, 154, 156, 157, 158, 159, 161, 164, 165, 166, 167, 173, 174, 175, 180, 181, 182, 183, 184, 188, 189, 190, 191, 194, 197, 198, 199] sage: set([a%8 for a in v]) _54 = set([1, 0, 2, 5, 4, 7, 6]) sage: v = [n for n in range(200,250) if is_conj_congruent_number(n)] sage: set([a%8 for a in v]) _56 = set([0, 3, 2, 5, 4, 7, 6]) sage: is_conj_congruent_number(219) _57 = True sage: is_conj_congruent_number(2005) _58 = True sage: E = cong_number_curve(2005) sage: E _60 = Elliptic Curve defined by y^2 = x^3 - 4020025*x over Rational Field sage: G = E.gens(verbose=True) 3 points of order 2: [0:0:1], [2005:0:1], [-2005:0:1] **************************** * Using 2-isogeny number 1 * **************************** Using 2-isogenous curve [0,0,0,16080100,0] ------------------------------------------------------- First step, determining 1st descent Selmer groups ------------------------------------------------------- After first local descent, rank bound = 3 rk(S^{phi}(E'))= 3 rk(S^{phi'}(E))= 2 ------------------------------------------------------- Second step, determining 2nd descent Selmer groups ------------------------------------------------------- After second local descent, rank bound = 3 rk(phi'(S^{2}(E)))= 3 rk(phi(S^{2}(E')))= 2 rk(S^{2}(E))= 5 rk(S^{2}(E'))= 4 **************************** * Using 2-isogeny number 2 * **************************** Using 2-isogenous curve [0,-12030,0,4020025,0] ------------------------------------------------------- First step, determining 1st descent Selmer groups ------------------------------------------------------- After first local descent, rank bound = 3 rk(S^{phi}(E'))= 4 rk(S^{phi'}(E))= 1 ------------------------------------------------------- Second step, determining 2nd descent Selmer groups ------------------------------------------------------- After second local descent, rank bound = 3 rk(phi'(S^{2}(E)))= 4 rk(phi(S^{2}(E')))= 1 rk(S^{2}(E))= 5 rk(S^{2}(E'))= 4 **************************** * Using 2-isogeny number 3 * **************************** Using 2-isogenous curve [0,12030,0,4020025,0] ------------------------------------------------------- First step, determining 1st descent Selmer groups ------------------------------------------------------- After first local descent, rank bound = 3 rk(S^{phi}(E'))= 3 rk(S^{phi'}(E))= 2 ------------------------------------------------------- Second step, determining 2nd descent Selmer groups ------------------------------------------------------- After second local descent, rank bound = 2 rk(phi'(S^{2}(E)))= 3 rk(phi(S^{2}(E')))= 1 rk(S^{2}(E))= 5 rk(S^{2}(E'))= 3 After second local descent, combined upper bound on rank = 2 Third step, determining E(Q)/phi(E'(Q)) and E'(Q)/phi'(E(Q)) ------------------------------------------------------- 1. E(Q)/phi(E'(Q)) ------------------------------------------------------- (c,d) =(-6015,8040050) (c',d')=(12030,4020025) First stage (no second descent yet)... (5,0,-6015,0,1608010): no rational point found (hlim=8) (10,0,-6015,0,804005): no rational point found (hlim=8) (401,0,-6015,0,20050): no rational point found (hlim=8) (802,0,-6015,0,10025): no rational point found (hlim=8) After first global descent, this component of the rank has lower bound 0 and upper bound 1 (difference = 1) Second descent will attempt to reduce this Second stage (using second descent)... d1=5: (x:y:z) = (12883:337361925:158) Curve E Point [131117634310:21731168398875:3944312], height = 18.893783589929163211674233870788384718695982504872 Second descent successfully found rational point for d1=5 After second global descent, this component of the rank = 3 ------------------------------------------------------- 2. E'(Q)/phi'(E(Q)) ------------------------------------------------------- First stage (no second descent yet)... (401,0,12030,0,10025): no rational point found (hlim=8) After first global descent, this component of the rank has lower bound 0 and upper bound 1 (difference = 1) Second descent will attempt to reduce this Second stage (using second descent)... d1=401: Second descent inconclusive for d1=401: ELS descendents exist but no rational point found After second global descent, this component of the rank has lower bound 0 and upper bound 1 (difference = 1) ------------------------------------------------------- Summary of results: ------------------------------------------------------- 1 <= rank(E) <= 2 #E(Q)/2E(Q) >= 8 Information on III(E/Q): #III(E/Q)[phi'] <= 4 #III(E/Q)[2] is between 2 and 4 Information on III(E'/Q): #phi'(III(E/Q)[2]) = 1 #III(E'/Q)[phi] = 1 #III(E'/Q)[2] <= 2 ------------------------------------------------------- List of points on E = [0,0,0,-4020025,0]: I. Points on E mod phi(E') Point [123209288750:21731168398875:3944312], height = 18.893783589929163211674233870788384718695982504871 II. Points on phi(E') mod 2E --none (modulo torsion). ------------------------------------------------------- Computing full set of 2 coset representatives for 2E(Q) in E(Q) (modulo torsion), and sorting into height order....done. Regulator (before saturation) = 18.893783589929163211674233870788384718695982504871 Searching for points (bound = 10)...done Regulator (after searching) = 18.893783589929163211674233870788384718695982504871 Saturating (bound = -1)...finished saturation (index was 1) Regulator (after saturation) = 18.893783589929163211674233870788384718695982504871 Unable to compute the rank, hence generators, with certainty (lower bound=1). This could be because Sha(E/Q)[2] is nontrivial. sage: G _62 = [(779805625/24964, 21731168398875/3944312)] sage: P = G[0] sage: a,b,c=congruent_triangle(P) sage: a _65 = -155639523/882430 sage: b _66 = -3538544300/155639523 sage: c _67 = 24424083902863721/137340984280890 sage: factor(2005) _68 = 5 * 401 sage: factor(2006) _69 = 2 * 17 * 59 sage: E = cong_number_curve(2006) sage: E _71 = Elliptic Curve defined by y^2 = x^3 - 4024036*x over Rational Field sage: is_conj_congruent_number(2006) _72 = True sage: E = cong_number_curve(2006) sage: G = E.gens(verbose=True) 3 points of order 2: [0:0:1], [2006:0:1], [-2006:0:1] **************************** * Using 2-isogeny number 1 * **************************** Using 2-isogenous curve [0,0,0,16096144,0] ------------------------------------------------------- First step, determining 1st descent Selmer groups ------------------------------------------------------- After first local descent, rank bound = 3 rk(S^{phi}(E'))= 4 rk(S^{phi'}(E))= 1 ------------------------------------------------------- Second step, determining 2nd descent Selmer groups ------------------------------------------------------- After second local descent, rank bound = 3 rk(phi'(S^{2}(E)))= 4 rk(phi(S^{2}(E')))= 1 rk(S^{2}(E))= 5 rk(S^{2}(E'))= 4 **************************** * Using 2-isogeny number 2 * **************************** Using 2-isogenous curve [0,-12036,0,4024036,0] ------------------------------------------------------- First step, determining 1st descent Selmer groups ------------------------------------------------------- After first local descent, rank bound = 3 rk(S^{phi}(E'))= 4 rk(S^{phi'}(E))= 1 ------------------------------------------------------- Second step, determining 2nd descent Selmer groups ------------------------------------------------------- After second local descent, rank bound = 3 rk(phi'(S^{2}(E)))= 4 rk(phi(S^{2}(E')))= 1 rk(S^{2}(E))= 5 rk(S^{2}(E'))= 4 **************************** * Using 2-isogeny number 3 * **************************** Using 2-isogenous curve [0,12036,0,4024036,0] ------------------------------------------------------- First step, determining 1st descent Selmer groups ------------------------------------------------------- After first local descent, rank bound = 3 rk(S^{phi}(E'))= 3 rk(S^{phi'}(E))= 2 ------------------------------------------------------- Second step, determining 2nd descent Selmer groups ------------------------------------------------------- After second local descent, rank bound = 2 rk(phi'(S^{2}(E)))= 3 rk(phi(S^{2}(E')))= 1 rk(S^{2}(E))= 5 rk(S^{2}(E'))= 3 After second local descent, combined upper bound on rank = 2 Third step, determining E(Q)/phi(E'(Q)) and E'(Q)/phi'(E(Q)) ------------------------------------------------------- 1. E(Q)/phi(E'(Q)) ------------------------------------------------------- (c,d) =(-6018,8048072) (c',d')=(12036,4024036) First stage (no second descent yet)... (17,0,-6018,0,473416): (x:y:z) = (10:204:1) Curve E Point [1700:34680:1], height = 3.7970846911387271852102431813863172782263003517029 (59,0,-6018,0,136408): (x:y:z) = (3:295:1) Curve E Point [531:52215:1], height = 3.7970846911387271852102431813863172782263003517028 After first global descent, this component of the rank = 3 ------------------------------------------------------- 2. E'(Q)/phi'(E(Q)) ------------------------------------------------------- First stage (no second descent yet)... (17,0,12036,0,236708): no rational point found (hlim=8) After first global descent, this component of the rank has lower bound 0 and upper bound 1 (difference = 1) Second descent will attempt to reduce this Second stage (using second descent)... d1=17: Second descent inconclusive for d1=17: ELS descendents exist but no rational point found After second global descent, this component of the rank has lower bound 0 and upper bound 1 (difference = 1) ------------------------------------------------------- Summary of results: ------------------------------------------------------- 1 <= rank(E) <= 2 #E(Q)/2E(Q) >= 8 Information on III(E/Q): #III(E/Q)[phi'] <= 4 #III(E/Q)[2] is between 2 and 4 Information on III(E'/Q): #phi'(III(E/Q)[2]) = 1 #III(E'/Q)[phi] = 1 #III(E'/Q)[2] <= 2 ------------------------------------------------------- List of points on E = [0,0,0,-4024036,0]: I. Points on E mod phi(E') Point [-306:34680:1], height = 3.7970846911387271852102431813863172782263003517032 Point [-1475:52215:1], height = 3.7970846911387271852102431813863172782263003517033 II. Points on phi(E') mod 2E --none (modulo torsion). ------------------------------------------------------- Computing full set of 2 coset representatives for 2E(Q) in E(Q) (modulo torsion), and sorting into height order....done. Regulator (before saturation) = 3.7970846911387271852102431813863172782263003517032 Searching for points (bound = 10)...done Regulator (after searching) = 3.7970846911387271852102431813863172782263003517032 Saturating (bound = -1)...finished saturation (index was 1) Regulator (after saturation) = 3.7970846911387271852102431813863172782263003517032 Unable to compute the rank, hence generators, with certainty (lower bound=1). This could be because Sha(E/Q)[2] is nontrivial. sage: G _75 = [(-306, 34680)] sage: P = G[0] sage: a,b,c=congruent_triangle(P) sage: a,b,c _78 = (340/3, 177/5, 1781/15) sage: is_conj_congruent_number(2007) _79 = True sage: is_conj_congruent_number(2008) _80 = True sage: is_conj_congruent_number(2009) _81 = True sage: is_conj_congruent_number(2010) _82 = False sage: time v = [n for n in range(1, 300) if is_conj_congruent_number(n)] CPU times: user 6.91 s, sys: 0.32 s, total: 7.24 s Wall time: 7.43 sage: len(v) _84 = 163 sage: