aboutsummaryrefslogtreecommitdiff
path: root/.kummer_degree.sage.swp
blob: befa4d7253783562244820291e420014de921a96 (plain)
ofshex dumpascii
0000 62 30 56 49 4d 20 38 2e 30 00 00 00 00 10 00 00 3f 52 40 5d 35 22 9e 00 4c 1c 00 00 73 65 62 61 b0VIM.8.0.......?R@]5"..L...seba
0020 73 74 69 61 6e 6f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 stiano..........................
0040 00 00 00 00 50 50 30 31 36 35 55 62 75 6e 74 75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ....PP0165Ubuntu................
0060 00 00 00 00 00 00 00 00 00 00 00 00 7e 73 65 62 61 73 74 69 61 6e 6f 2f 44 72 6f 70 62 6f 78 2f ............~sebastiano/Dropbox/
0080 70 68 64 2f 6b 75 6d 6d 65 72 2d 64 65 67 72 65 65 73 2f 67 69 74 2f 6b 75 6d 6d 65 72 2d 64 65 phd/kummer-degrees/git/kummer-de
00a0 67 72 65 65 73 2f 6b 75 6d 6d 65 72 5f 64 65 67 72 65 65 2e 73 61 67 65 00 00 00 00 00 00 00 00 grees/kummer_degree.sage........
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03e0 00 00 00 00 00 00 00 00 00 75 74 66 2d 38 0d 55 33 32 31 30 00 00 00 00 23 22 21 20 13 12 55 00 .........utf-8.U3210....#"!...U.
0400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
04a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
04c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
04e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
05a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
05c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
05e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
06a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
06c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
06e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
07a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
07c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
07e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
08a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
08c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
08e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
09a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
09c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
09e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0a00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0a20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0a60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0b80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0ba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0c00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0c20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0c60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0c80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0d00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0d20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0e00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1000 74 70 0a 00 7f 00 00 00 02 00 00 00 00 00 00 00 48 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 tp..............H...............
1020 01 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 50 00 00 00 00 00 00 00 49 00 00 00 00 00 00 00 ................P.......I.......
1040 01 00 00 00 00 00 00 00 09 00 00 00 00 00 00 00 77 00 00 00 00 00 00 00 99 00 00 00 00 00 00 00 ................w...............
1060 01 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 43 00 00 00 00 00 00 00 10 01 00 00 00 00 00 00 ................C...............
1080 01 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 1c 00 00 00 00 00 00 00 75 01 00 00 00 00 00 00 ........................u.......
10a0 01 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 44 00 00 00 00 00 00 00 9a 01 00 00 00 00 00 00 ................D...............
10c0 01 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 5e 00 00 00 00 00 00 00 db 01 00 00 00 00 00 00 ................^...............
10e0 01 00 00 00 00 00 00 00 0b 00 00 00 00 00 00 00 5f 00 00 00 00 00 00 00 48 02 00 00 00 00 00 00 ................_.......H.......
1100 01 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 64 00 00 00 00 00 00 00 a7 02 00 00 00 00 00 00 ................d...............
1120 01 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 2f 00 00 00 00 00 00 00 0b 03 00 00 00 00 00 00 ................/...............
1140 01 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 2f 00 00 00 00 00 00 00 0b 03 00 00 00 00 00 00 ................/...............
1160 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
14a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
14c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
14e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
15a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
15c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
15e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
18a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
18c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
18e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
19a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
19c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
19e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1c00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1c20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1c60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1c80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1d00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1d20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2000 61 64 00 00 17 00 00 00 53 01 00 00 00 10 00 00 48 00 00 00 00 00 00 00 b3 0f 00 00 65 0f 00 00 ad......S.......H...........e...
2020 55 0f 00 00 53 0f 00 00 06 0f 00 00 bb 0e 00 00 76 0e 00 00 27 0e 00 00 d7 0d 00 00 9f 0d 00 00 U...S...........v...'...........
2040 54 0d 00 00 08 0d 00 00 b8 0c 00 00 6f 0c 00 00 22 0c 00 00 e9 0b 00 00 e7 0b 00 00 9b 0b 00 00 T...........o..."...............
2060 51 0b 00 00 3c 0b 00 00 02 0b 00 00 b2 0a 00 00 68 0a 00 00 5d 0a 00 00 0f 0a 00 00 e8 09 00 00 Q...<...........h...]...........
2080 c9 09 00 00 c8 09 00 00 7c 09 00 00 6b 09 00 00 6a 09 00 00 1b 09 00 00 ef 08 00 00 9f 08 00 00 ........|...k...j...............
20a0 52 08 00 00 39 08 00 00 ea 07 00 00 9e 07 00 00 75 07 00 00 5f 07 00 00 43 07 00 00 39 07 00 00 R...9...........u..._...C...9...
20c0 1f 07 00 00 1e 07 00 00 d0 06 00 00 81 06 00 00 32 06 00 00 e6 05 00 00 97 05 00 00 47 05 00 00 ................2...........G...
20e0 f9 04 00 00 cf 04 00 00 bc 04 00 00 a0 04 00 00 9f 04 00 00 52 04 00 00 0b 04 00 00 bb 03 00 00 ....................R...........
2100 b1 03 00 00 b0 03 00 00 80 03 00 00 7f 03 00 00 34 03 00 00 e5 02 00 00 bc 02 00 00 a3 02 00 00 ................4...............
2120 86 02 00 00 61 02 00 00 3d 02 00 00 f2 01 00 00 a1 01 00 00 53 01 00 00 52 01 00 00 00 00 00 00 ....a...=...........S...R.......
2140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
2160 20 20 20 20 20 20 20 23 20 63 61 73 65 20 6e 3d 32 20 61 6e 64 20 62 3d 32 2c 20 69 6e 20 77 68 .......#.case.n=2.and.b=2,.in.wh
2180 69 63 68 20 63 61 73 65 20 69 74 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 51 5f 34 2e ich.case.it.is.contained.in.Q_4.
21a0 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 49 74 20 69 73 20 63 6f 6e .....................#.It.is.con
21c0 74 61 69 6e 65 64 20 69 6e 20 51 5f 7b 6c 63 6d 28 32 5e 7b 6e 2b 31 7d 2c 63 79 63 5f 65 6d 62 tained.in.Q_{lcm(2^{n+1},cyc_emb
21e0 28 62 29 29 7d 2c 20 65 78 63 65 70 74 20 69 6e 20 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (b))},.except.in................
2200 20 20 20 20 20 20 23 20 53 70 65 63 69 61 6c 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 ......#.Special.element.of.the.f
2220 6f 72 6d 20 5c 7a 65 74 61 5f 7b 32 5e 7b 6e 2b 31 7d 7d 5c 73 71 72 74 28 62 29 2e 00 20 20 20 orm.\zeta_{2^{n+1}}\sqrt(b).....
2240 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 67 20 3c 20 30 20 61 6e 64 20 6e 20 3e 20 31 3a .............if.g.<.0.and.n.>.1:
2260 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 43 61 73 65 20 6f 66 20 6e 65 67 61 74 .................#.Case.of.negat
2280 69 76 65 20 67 00 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 67 20 69 6e 20 42 5b 6e 2d 31 ive.g.............for.g.in.B[n-1
22a0 5d 3a 00 20 20 20 20 20 20 20 20 69 66 20 6e 2d 31 20 3c 20 6c 65 6e 28 42 29 3a 00 20 20 20 20 ]:.........if.n-1.<.len(B):.....
22c0 20 20 20 20 23 20 64 65 61 6c 74 20 77 69 74 68 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 65 6c ....#.dealt.with.immediately.bel
22e0 6f 77 29 2e 00 20 20 20 20 20 20 20 20 23 20 54 68 69 73 20 69 73 20 6e 6f 74 20 64 6f 6e 65 20 ow)..........#.This.is.not.done.
2300 69 6e 20 63 61 73 65 20 77 65 20 61 72 65 20 69 6e 20 74 68 65 20 65 78 74 72 61 20 22 66 61 6b in.case.we.are.in.the.extra."fak
2320 65 22 20 6c 65 76 65 6c 20 28 74 68 69 73 20 63 61 73 65 00 20 20 20 20 20 20 20 20 23 20 57 65 e".level.(this.case.........#.We
2340 20 61 64 64 20 74 68 65 20 6e 65 77 20 65 6c 65 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 68 6f .add.the.new.elements.to.the.sho
2360 72 74 6c 69 73 74 2c 20 6d 6f 64 69 66 79 69 6e 67 20 4d 20 69 66 20 6e 65 65 64 65 64 2e 00 00 rtlist,.modifying.M.if.needed...
2380 20 20 20 20 66 6f 72 20 6e 20 69 6e 20 72 61 6e 67 65 28 20 31 2c 20 4e 2b 31 20 29 3a 20 23 20 ....for.n.in.range(.1,.N+1.):.#.
23a0 31 20 5c 6c 65 71 20 6e 20 5c 6c 65 71 20 4e 00 00 20 20 20 20 4d 20 3d 20 31 00 20 20 20 20 23 1.\leq.n.\leq.N......M.=.1.....#
23c0 20 73 68 6f 72 74 6c 69 73 74 2c 20 77 65 20 64 65 63 6c 61 72 65 20 69 74 20 68 65 72 65 20 61 .shortlist,.we.declare.it.here.a
23e0 6e 64 20 69 6e 63 72 65 61 73 65 20 69 74 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 20 61 74 20 nd.increase.it.appropriately.at.
2400 65 61 63 68 20 73 74 65 70 2e 00 20 20 20 20 23 20 77 68 6f 6c 65 20 69 6e 74 65 72 73 65 63 74 each.step......#.whole.intersect
2420 69 6f 6e 20 77 69 74 68 20 51 5f 5c 69 6e 66 74 79 2c 20 61 6c 73 6f 20 67 72 6f 77 73 20 77 69 ion.with.Q_\infty,.also.grows.wi
2440 74 68 20 6e 2e 20 41 73 20 77 69 74 68 20 74 68 65 00 20 20 20 20 23 20 54 68 65 20 69 6e 74 65 th.n..As.with.the.....#.The.inte
2460 67 65 72 73 20 4d 2c 20 67 69 76 69 6e 67 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 63 79 63 6c gers.M,.giving.the.smallest.cycl
2480 6f 74 6f 6d 69 63 20 66 69 65 6c 64 20 69 6e 20 77 68 69 63 68 20 6c 69 65 73 20 74 68 65 00 00 otomic.field.in.which.lies.the..
24a0 20 20 20 20 73 70 65 63 69 61 6c 5f 65 6c 65 6d 65 6e 74 20 3d 20 28 31 2c 31 29 00 20 20 20 20 ....special_element.=.(1,1).....
24c0 73 68 6f 72 74 6c 69 73 74 20 3d 20 5b 5d 00 20 20 20 20 23 20 69 73 6e 6f 20 73 70 65 63 69 61 shortlist.=.[].....#.isno.specia
24e0 6c 20 65 6c 65 6d 65 6e 74 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 2e 00 20 20 20 20 23 20 61 l.element.at.this.level......#.a
2500 73 20 28 6e 2c 62 29 2e 20 57 65 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 28 31 2c 31 29 20 s.(n,b)..We.use.the.value.(1,1).
2520 28 73 70 65 63 69 61 6c 20 65 6c 65 6d 65 6e 74 20 2d 31 29 20 74 6f 20 73 61 79 20 74 68 61 74 (special.element.-1).to.say.that
2540 20 74 68 65 72 65 00 20 20 20 20 23 20 54 68 65 20 22 73 70 65 63 69 61 6c 20 65 6c 65 6d 65 6e .there.....#.The."special.elemen
2560 74 22 20 69 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 5c 7a 65 74 61 5f 7b 32 5e 6e 7d 5c 73 71 t".is.of.the.form.\zeta_{2^n}\sq
2580 72 74 7b 62 7d 2c 20 77 68 69 63 68 20 77 65 20 65 6e 63 6f 64 65 00 20 20 20 20 23 20 64 65 63 rt{b},.which.we.encode.....#.dec
25a0 6c 61 72 65 20 69 74 20 62 65 66 6f 72 65 20 73 74 61 72 74 69 6e 67 20 74 6f 20 6c 6f 6f 70 20 lare.it.before.starting.to.loop.
25c0 6f 76 65 72 20 6e 20 61 6e 64 20 77 65 20 62 75 69 6c 64 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 over.n.and.we.build.it.increment
25e0 61 6c 6c 79 2e 00 20 20 20 20 23 20 65 6c 65 6d 65 6e 74 20 69 73 20 64 65 61 6c 74 20 77 69 74 ally......#.element.is.dealt.wit
2600 68 20 6c 61 74 65 72 29 2e 20 54 68 65 20 73 68 6f 72 74 6c 69 73 74 20 67 72 6f 77 73 20 61 74 h.later)..The.shortlist.grows.at
2620 20 65 61 63 68 20 73 74 65 70 2c 20 73 6f 20 77 65 00 20 20 20 20 23 20 63 6f 6d 69 6e 67 20 66 .each.step,.so.we.....#.coming.f
2640 72 6f 6d 20 74 61 6b 69 6e 67 20 61 20 73 75 69 74 61 62 6c 65 20 72 6f 6f 74 20 6f 66 20 61 20 rom.taking.a.suitable.root.of.a.
2660 6e 65 67 61 74 69 76 65 20 67 65 6e 65 72 61 74 6f 72 3b 20 74 68 69 73 20 73 70 65 63 69 61 6c negative.generator;.this.special
2680 00 20 20 20 20 23 20 74 68 69 73 20 73 68 6f 72 74 6c 69 73 74 20 28 61 6e 64 20 61 20 22 73 70 .....#.this.shortlist.(and.a."sp
26a0 65 63 69 61 6c 20 65 6c 65 6d 65 6e 74 22 2c 20 6e 6f 74 20 61 6c 77 61 79 73 20 6f 66 20 74 68 ecial.element",.not.always.of.th
26c0 65 20 66 6f 72 6d 20 73 71 72 74 28 64 29 2c 00 20 20 20 20 23 20 54 68 65 20 69 6e 74 65 72 73 e.form.sqrt(d),.....#.The.inters
26e0 65 63 74 69 6f 6e 20 69 73 20 67 69 76 65 6e 20 62 79 20 61 64 64 69 6e 67 20 74 68 65 20 73 71 ection.is.given.by.adding.the.sq
2700 75 61 72 65 20 72 6f 6f 74 73 20 6f 66 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66 00 00 20 uare.roots.of.the.elements.of...
2720 20 20 20 20 20 20 20 4e 20 3d 20 6d 61 78 28 33 2c 6c 65 6e 28 42 29 29 00 20 20 20 20 65 6c 73 .......N.=.max(3,len(B)).....els
2740 65 3a 00 20 20 20 20 20 20 20 20 4e 20 3d 20 6d 61 78 28 33 2c 6c 65 6e 28 42 29 2b 31 29 00 20 e:.........N.=.max(3,len(B)+1)..
2760 20 20 20 69 66 20 64 20 3d 3d 20 6c 65 6e 28 42 29 2d 31 3a 00 20 20 20 20 23 20 74 61 6b 69 6e ...if.d.==.len(B)-1:.....#.takin
2780 67 20 74 68 65 20 72 6f 6f 74 20 6f 66 20 61 6e 20 65 76 65 6e 20 70 6f 77 65 72 29 2e 00 20 20 g.the.root.of.an.even.power)....
27a0 20 20 23 20 31 2c 20 62 65 63 61 75 73 65 20 69 74 20 77 6f 75 6c 64 20 63 6f 6e 74 72 69 62 75 ..#.1,.because.it.would.contribu
27c0 74 65 20 74 6f 20 74 68 65 20 73 68 6f 72 74 6c 69 73 74 20 69 6e 20 74 68 65 20 6e 65 78 74 20 te.to.the.shortlist.in.the.next.
27e0 6c 65 76 65 6c 20 28 62 79 00 20 20 20 20 23 20 49 66 20 74 68 65 20 6e 65 67 61 74 69 76 65 20 level.(by.....#.If.the.negative.
2800 67 65 6e 65 72 61 74 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6c 61 73 74 20 6c 65 76 65 6c 2c 20 generator.is.on.the.last.level,.
2820 77 65 20 6e 65 65 64 20 74 6f 20 69 6e 63 72 65 61 73 65 20 4e 20 62 79 00 20 20 20 20 23 20 61 we.need.to.increase.N.by.....#.a
2840 6e 79 20 65 6c 65 6d 65 6e 74 20 6f 66 20 47 29 2e 00 20 20 20 20 23 20 74 68 65 6f 72 79 2c 20 ny.element.of.G)......#.theory,.
2860 74 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 20 69 6e 20 73 6f 6d 65 20 63 61 this.is.not.necessary.in.some.ca
2880 73 65 73 2c 20 65 2e 67 2e 20 69 66 20 32 20 64 6f 65 73 20 6e 6f 74 20 64 69 76 69 64 65 00 20 ses,.e.g..if.2.does.not.divide..
28a0 20 20 20 23 20 57 65 20 61 6c 77 61 79 73 20 68 61 76 65 20 74 6f 20 69 6e 63 6c 75 64 65 20 6e ...#.We.always.have.to.include.n
28c0 3d 33 2c 20 62 65 63 61 75 73 65 20 6f 66 20 70 72 6f 62 6c 65 6d 20 77 69 74 68 20 73 71 72 74 =3,.because.of.problem.with.sqrt
28e0 28 32 29 20 69 6e 20 51 5f 38 20 28 69 6e 00 20 20 20 20 23 20 74 68 65 20 73 61 6d 65 20 61 73 (2).in.Q_8.(in.....#.the.same.as
2900 20 74 68 61 74 20 6f 66 20 51 28 5c 73 71 72 74 7b 32 5e 4e 7d 7b 47 7d 29 2e 00 20 20 20 20 23 .that.of.Q(\sqrt{2^N}{G})......#
2920 20 4e 20 69 73 20 73 75 63 68 20 74 68 61 74 20 66 6f 72 20 65 76 65 72 79 20 6e 20 3e 20 4e 20 .N.is.such.that.for.every.n.>.N.
2940 74 68 65 20 61 64 65 6c 69 63 20 66 61 69 6c 75 72 65 20 6f 66 20 51 28 5c 73 71 72 74 7b 32 5e the.adelic.failure.of.Q(\sqrt{2^
2960 6e 7d 7b 47 7d 29 20 69 73 00 00 20 20 20 20 61 64 5f 66 61 69 6c 20 3d 20 5b 5d 00 20 20 20 20 n}{G}).is......ad_fail.=.[].....
2980 23 20 54 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20 28 6f 72 20 70 #.The.table.to.be.returned.(or.p
29a0 72 69 6e 74 65 64 20 61 74 20 74 68 65 20 65 6e 64 29 2c 20 61 73 20 64 65 73 63 72 69 62 65 64 rinted.at.the.end),.as.described
29c0 20 61 62 6f 76 65 2e 00 00 64 65 66 20 61 64 65 6c 69 63 5f 66 61 69 6c 75 72 65 5f 67 62 28 20 .above...def.adelic_failure_gb(.
29e0 42 2c 20 64 20 29 3a 00 23 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20 69 73 20 6f 66 20 74 68 65 B,.d.):.#.the.last.row.is.of.the
2a00 20 66 6f 72 6d 20 28 4d 30 2c 72 30 29 2e 00 23 20 45 61 63 68 20 64 69 76 69 73 6f 72 20 6f 66 .form.(M0,r0)..#.Each.divisor.of
2a20 20 4d 20 61 70 70 65 61 72 73 20 61 74 20 6d 6f 73 74 20 6f 6e 63 65 20 6f 6e 20 65 61 63 68 20 .M.appears.at.most.once.on.each.
2a40 72 6f 77 2c 20 61 6e 64 20 74 68 65 20 6c 61 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 00 23 20 51 row,.and.the.last.element.of.#.Q
2a60 5f 7b 32 5e 6e 7d 2e 00 23 20 64 69 76 69 73 6f 72 20 6f 66 20 4d 30 20 61 6e 64 20 72 20 69 73 _{2^n}..#.divisor.of.M0.and.r.is
2a80 20 74 68 65 20 64 65 67 72 65 65 20 6f 66 20 51 28 5c 73 71 72 74 7b 32 5e 7b 69 2b 31 7d 7d 7b .the.degree.of.Q(\sqrt{2^{i+1}}{
2aa0 47 7d 29 20 5c 63 61 70 20 51 5f 64 20 6f 76 65 72 00 23 20 45 61 63 68 20 72 6f 77 20 52 3d 61 G}).\cap.Q_d.over.#.Each.row.R=a
2ac0 64 5f 66 61 69 6c 5b 69 5d 20 63 6f 6e 74 61 69 6e 73 20 61 20 76 61 72 69 61 62 6c 65 20 6e 75 d_fail[i].contains.a.variable.nu
2ae0 6d 62 65 72 20 6f 66 20 70 61 69 72 73 20 28 64 2c 72 29 2c 20 77 68 65 72 65 20 64 20 69 73 20 mber.of.pairs.(d,r),.where.d.is.
2b00 61 00 23 20 54 68 65 20 74 61 62 6c 65 20 61 64 5f 66 61 69 6c 20 68 61 73 20 4e 20 72 6f 77 73 a.#.The.table.ad_fail.has.N.rows
2b20 2c 20 77 68 65 72 65 20 4e 20 69 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 00 23 20 63 6f ,.where.N.is.defined.below..#.co
2b40 6e 74 61 69 6e 65 64 20 69 6e 20 51 5f 4d 30 2e 00 23 20 69 6e 74 65 67 65 72 20 73 75 63 68 20 ntained.in.Q_M0..#.integer.such.
2b60 74 68 61 74 20 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 51 28 5c 73 71 72 74 that.the.intersection.of.Q(\sqrt
2b80 7b 32 5e 6e 7d 7b 47 7d 29 20 77 69 74 68 20 51 5f 5c 69 6e 66 74 79 20 69 73 00 23 20 4f 75 74 {2^n}{G}).with.Q_\infty.is.#.Out
2ba0 70 75 74 3a 20 61 20 74 61 62 6c 65 20 61 64 5f 66 61 69 6c 20 61 73 20 64 65 73 63 72 69 62 65 put:.a.table.ad_fail.as.describe
2bc0 64 20 62 65 6c 6f 77 2e 20 43 61 6c 6c 20 4d 30 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 70 6f d.below..Call.M0.the.smallest.po
2be0 73 69 74 69 76 65 00 23 00 23 20 20 20 20 74 68 69 73 20 62 61 73 69 73 20 69 73 20 67 69 76 65 sitive.#.#....this.basis.is.give
2c00 6e 20 61 73 20 69 6e 70 75 74 20 66 6f 72 20 61 64 65 6c 69 63 5f 66 61 69 6c 75 72 65 5f 67 62 n.as.input.for.adelic_failure_gb
2c20 2e 00 23 20 20 20 20 70 72 6f 64 75 63 65 73 20 61 20 62 61 73 69 73 20 74 68 61 74 20 6d 61 79 ..#....produces.a.basis.that.may
2c40 20 68 61 76 65 20 6e 65 67 61 74 69 76 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 64 69 76 69 73 .have.negative.elements.of.divis
2c60 69 62 69 6c 69 74 79 20 30 2c 20 61 6e 64 00 23 20 20 20 20 74 68 65 20 63 6f 72 72 65 63 74 6e ibility.0,.and.#....the.correctn
2c80 65 73 73 20 6f 66 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 3b 20 69 6e 20 66 61 63 74 2c 20 74 ess.of.the.algorithm;.in.fact,.t
2ca0 68 65 20 66 75 6e 63 74 69 6f 6e 20 61 64 6a 75 73 74 5f 73 69 67 6e 00 23 20 33 27 2e 20 4e 6f he.function.adjust_sign.#.3'..No
2cc0 74 69 63 65 20 74 68 61 74 20 74 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 6e 20 6e 65 67 61 74 tice.that.the.existence.on.negat
2ce0 69 76 65 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 42 5b 30 5d 20 64 6f 65 73 20 6e 6f 74 20 69 6e ive.elements.in.B[0].does.not.in
2d00 66 6c 75 65 6e 63 65 00 23 20 20 20 20 6e 65 67 61 74 69 76 65 20 65 6c 65 6d 65 6e 74 20 6f 66 fluence.#....negative.element.of
2d20 20 42 5b 64 5d 20 28 69 66 20 64 3d 2d 31 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f .B[d].(if.d=-1,.then.there.is.no
2d40 20 6e 65 67 61 74 69 76 65 20 65 6c 65 6d 65 6e 74 29 2e 00 23 20 33 2e 20 46 6f 72 20 69 20 21 .negative.element)..#.3..For.i.!
2d60 3d 20 64 20 65 76 65 72 79 20 65 6c 65 6d 65 6e 74 20 6f 66 20 42 5b 69 5d 20 69 73 20 70 6f 73 =.d.every.element.of.B[i].is.pos
2d80 69 74 69 76 65 2c 20 61 6e 64 20 42 5b 64 5d 5b 30 5d 20 69 73 20 74 68 65 20 6f 6e 6c 79 00 23 itive,.and.B[d][0].is.the.only.#
2da0 20 20 20 20 32 5e 69 2d 74 68 20 70 6f 77 65 72 20 6f 66 20 61 20 73 74 72 6f 6e 67 6c 79 20 32 ....2^i-th.power.of.a.strongly.2
2dc0 2d 69 6e 64 69 76 69 73 69 62 6c 65 20 72 61 74 69 6f 6e 61 6c 2e 00 23 20 20 20 20 6f 66 20 44 -indivisible.rational..#....of.D
2de0 65 62 72 79 2d 50 65 72 75 63 63 61 3b 20 69 2e 65 2e 20 65 61 63 68 20 65 6c 65 6d 65 6e 74 20 ebry-Perucca;.i.e..each.element.
2e00 6f 66 20 42 5b 69 5d 20 69 73 2c 20 75 70 20 74 6f 20 70 6c 75 73 20 6f 72 20 6d 69 6e 75 73 20 of.B[i].is,.up.to.plus.or.minus.
2e20 31 2c 20 74 68 65 00 23 20 32 2e 20 54 68 65 20 62 61 73 69 73 20 67 69 76 65 6e 20 62 79 20 42 1,.the.#.2..The.basis.given.by.B
2e40 20 69 73 20 32 2d 6d 61 78 69 6d 61 6c 2c 20 74 68 61 74 20 69 73 20 74 6f 20 73 61 79 20 69 74 .is.2-maximal,.that.is.to.say.it
2e60 20 73 61 74 69 73 66 69 65 73 20 54 68 65 6f 72 65 6d 20 31 34 00 23 20 31 2e 20 45 61 63 68 20 .satisfies.Theorem.14.#.1..Each.
2e80 6c 69 73 74 20 42 5b 69 5d 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 62 61 73 69 73 20 65 6c 65 list.B[i].contains.all.basis.ele
2ea0 6d 65 6e 74 73 20 6f 66 20 32 2d 64 69 76 69 73 69 62 69 6c 69 74 79 20 69 2e 00 23 20 6c 69 73 ments.of.2-divisibility.i..#.lis
2ec0 74 73 2c 20 61 6e 64 20 61 20 6e 6f 6e 20 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 64 ts,.and.a.non.negative.integer.d
2ee0 2e 20 54 68 65 79 20 68 61 76 65 20 74 6f 20 73 61 74 69 73 66 79 20 74 68 65 20 66 6f 6c 6c 6f ..They.have.to.satisfy.the.follo
2f00 77 69 6e 67 3a 00 23 20 49 6e 70 75 74 3a 20 61 20 67 6f 6f 64 20 62 61 73 69 73 20 42 20 66 6f wing:.#.Input:.a.good.basis.B.fo
2f20 72 20 74 68 65 20 74 6f 72 73 69 6f 6e 2d 66 72 65 65 20 67 72 6f 75 70 20 47 2c 20 6f 72 67 61 r.the.torsion-free.group.G,.orga
2f40 6e 69 7a 65 64 20 61 73 20 61 20 6c 69 73 74 20 6f 66 00 23 00 23 20 6f 76 65 72 20 51 5f 7b 32 nized.as.a.list.of.#.#.over.Q_{2
2f60 5e 6e 7d 2e 00 23 20 6f 66 20 74 68 65 20 74 68 65 20 4b 75 6d 6d 65 72 20 65 78 74 65 6e 73 69 ^n}..#.of.the.the.Kummer.extensi
2f80 6f 6e 20 51 28 5c 73 71 72 74 7b 32 5e 6e 7d 7b 47 7d 29 20 77 69 74 68 20 74 68 65 20 4d 2d 74 on.Q(\sqrt{2^n}{G}).with.the.M-t
2fa0 68 20 63 79 63 6c 6f 74 6f 6d 69 63 20 66 69 65 6c 64 00 23 20 43 6f 6d 70 75 74 65 73 20 74 68 h.cyclotomic.field.#.Computes.th
2fc0 65 20 22 61 64 65 6c 69 63 20 4b 75 6d 6d 65 72 20 66 61 69 6c 75 72 65 22 2c 20 69 2e 65 2e 20 e."adelic.Kummer.failure",.i.e..
2fe0 74 68 65 20 64 65 67 72 65 65 73 20 6f 66 20 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e 00 the.degrees.of.the.intersection.
3000 61 64 00 00 e4 09 00 00 bc 0a 00 00 00 10 00 00 2f 00 00 00 00 00 00 00 d3 0f 00 00 c5 0f 00 00 ad............../...............
3020 99 0f 00 00 98 0f 00 00 72 0f 00 00 4c 0f 00 00 37 0f 00 00 36 0f 00 00 ea 0e 00 00 c2 0e 00 00 ........r...L...7...6...........
3040 90 0e 00 00 8b 0e 00 00 47 0e 00 00 46 0e 00 00 25 0e 00 00 06 0e 00 00 f1 0d 00 00 ae 0d 00 00 ........G...F...%...............
3060 ad 0d 00 00 66 0d 00 00 23 0d 00 00 06 0d 00 00 e9 0c 00 00 d6 0c 00 00 ad 0c 00 00 9b 0c 00 00 ....f...#.......................
3080 9a 0c 00 00 71 0c 00 00 3b 0c 00 00 3a 0c 00 00 19 0c 00 00 14 0c 00 00 f5 0b 00 00 e0 0b 00 00 ....q...;...:...................
30a0 db 0b 00 00 ba 0b 00 00 99 0b 00 00 98 0b 00 00 87 0b 00 00 6e 0b 00 00 3d 0b 00 00 2f 0b 00 00 ....................n...=.../...
30c0 ff 0a 00 00 f5 0a 00 00 e0 0a 00 00 df 0a 00 00 bc 0a 00 00 bb 0a 00 00 00 00 00 00 00 00 00 00 ................................
30e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
31e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
32a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
32c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
32e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
33a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
33c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
33e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
34a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
34c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
34e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
35a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
35c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
35e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
36a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
36c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
36e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
37a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
37c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
37e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
38a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
38c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
38e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
39a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
39c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
39e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3a00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3a20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3a60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 20 20 20 ................................
3ac0 72 65 74 75 72 6e 20 65 78 70 5f 64 65 67 20 2f 20 66 61 69 6c 75 72 65 5b 69 5d 5b 6a 5d 00 00 return.exp_deg./.failure[i][j]..
3ae0 20 20 20 20 20 20 20 20 66 61 69 6c 75 72 65 20 3d 20 46 54 00 20 20 20 20 65 6c 73 65 3a 00 20 ........failure.=.FT.....else:..
3b00 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 75 72 65 20 3d 20 74 6f 72 73 69 6f 6e 5f 74 61 62 ...........failure.=.torsion_tab
3b20 6c 65 5f 6f 64 64 28 20 64 61 74 61 20 29 00 20 20 20 20 20 20 20 20 65 6c 73 65 3a 00 20 20 20 le_odd(.data.).........else:....
3b40 20 20 20 20 20 20 20 20 20 66 61 69 6c 75 72 65 20 3d 20 74 6f 72 73 69 6f 6e 5f 74 61 62 6c 65 .........failure.=.torsion_table
3b60 5f 65 76 65 6e 28 20 64 61 74 61 20 29 00 20 20 20 20 20 20 20 20 69 66 20 28 4d 2f 4e 29 25 32 _even(.data.).........if.(M/N)%2
3b80 20 3d 3d 20 30 3a 00 20 20 20 20 69 66 20 74 6f 72 73 69 6f 6e 3a 20 00 00 20 20 20 20 69 20 3d .==.0:.....if.torsion:.......i.=
3ba0 20 64 69 76 73 5f 4e 30 2e 69 6e 64 65 78 28 67 63 64 28 4e 2c 4e 30 29 29 00 20 20 20 20 6a 20 .divs_N0.index(gcd(N,N0)).....j.
3bc0 3d 20 64 69 76 73 5f 4d 30 2e 69 6e 64 65 78 28 67 63 64 28 4d 2c 4d 30 29 29 00 20 20 20 20 00 =.divs_M0.index(gcd(M,M0))......
3be0 20 20 20 20 20 20 20 20 65 78 70 5f 64 65 67 20 2a 3d 20 32 00 20 20 20 20 69 66 20 74 6f 72 73 ........exp_deg.*=.2.....if.tors
3c00 69 6f 6e 20 61 6e 64 20 4e 20 25 20 32 20 3d 3d 20 30 3a 00 20 20 20 20 00 20 20 20 20 65 78 70 ion.and.N.%.2.==.0:..........exp
3c20 5f 64 65 67 20 3d 20 65 75 6c 65 72 5f 70 68 69 28 4d 29 20 2a 20 4e 5e 72 00 00 20 20 20 20 28 _deg.=.euler_phi(M).*.N^r......(
3c40 28 72 2c 74 6f 72 73 69 6f 6e 29 2c 28 4d 30 2c 64 69 76 73 5f 4d 30 29 2c 28 4e 30 2c 64 69 76 (r,torsion),(M0,divs_M0),(N0,div
3c60 73 5f 4e 30 29 2c 46 54 29 20 3d 20 64 61 74 61 00 20 20 20 20 64 61 74 61 20 3d 20 74 6f 74 61 s_N0),FT).=.data.....data.=.tota
3c80 6c 5f 6b 75 6d 6d 65 72 5f 66 61 69 6c 75 72 65 28 47 2c 46 61 6c 73 65 29 00 00 20 20 20 20 20 l_kummer_failure(G,False).......
3ca0 20 20 20 72 65 74 75 72 6e 20 2d 31 00 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 4d 20 69 73 ...return.-1.........print."M.is
3cc0 20 6e 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 4e 22 00 20 20 20 20 69 66 20 4d 20 25 .not.a.multiple.of.N".....if.M.%
3ce0 20 4e 20 21 3d 20 30 3a 00 64 65 66 20 4b 75 6d 6d 65 72 44 65 67 72 65 65 28 20 47 2c 20 4d 2c .N.!=.0:.def.KummerDegree(.G,.M,
3d00 20 4e 20 29 3a 00 23 20 4d 20 6d 75 73 74 20 62 65 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 .N.):.#.M.must.be.a.multiple.of.
3d20 4e 2e 00 23 20 6d 75 6c 74 69 70 6c 69 63 61 74 69 76 65 20 67 72 6f 75 70 20 6f 66 20 51 2c 20 N..#.multiplicative.group.of.Q,.
3d40 72 65 74 75 72 6e 73 20 74 68 65 20 64 65 67 72 65 65 20 6f 66 20 51 5f 7b 4d 2c 4e 7d 20 6f 76 returns.the.degree.of.Q_{M,N}.ov
3d60 65 72 20 51 2e 00 23 20 47 69 76 65 6e 20 61 20 73 65 74 20 6f 66 20 67 65 6e 65 72 61 74 6f 72 er.Q..#.Given.a.set.of.generator
3d80 73 20 66 6f 72 20 61 20 66 69 6e 69 74 65 6c 79 20 67 65 6e 65 72 61 74 65 64 20 73 75 62 67 72 s.for.a.finitely.generated.subgr
3da0 6f 75 70 20 47 20 6f 66 20 74 68 65 00 00 20 20 20 20 72 65 74 75 72 6e 20 65 78 70 5f 64 65 67 oup.G.of.the......return.exp_deg
3dc0 20 2f 20 6b 75 6d 6d 65 72 5f 66 61 69 6c 75 72 65 5f 66 72 6f 6d 5f 74 6f 74 61 6c 5f 74 61 62 ./.kummer_failure_from_total_tab
3de0 6c 65 28 20 4d 2c 20 4e 2c 20 64 61 74 61 20 29 00 20 20 20 20 20 20 20 20 65 78 70 5f 64 65 67 le(.M,.N,.data.).........exp_deg
3e00 20 2a 3d 20 32 00 20 20 20 20 69 66 20 74 6f 72 73 69 6f 6e 20 61 6e 64 20 4e 20 25 20 32 20 3d .*=.2.....if.torsion.and.N.%.2.=
3e20 3d 20 30 3a 00 20 20 20 20 65 78 70 5f 64 65 67 20 3d 20 65 75 6c 65 72 5f 70 68 69 28 4d 29 20 =.0:.....exp_deg.=.euler_phi(M).
3e40 2a 20 4e 5e 72 00 00 20 20 20 20 28 20 28 20 72 2c 20 74 6f 72 73 69 6f 6e 20 29 2c 20 28 20 4d *.N^r......(.(.r,.torsion.),.(.M
3e60 30 2c 20 64 69 76 73 5f 4d 30 20 29 2c 20 28 20 4e 30 2c 20 64 69 76 73 5f 4e 30 20 29 2c 20 46 0,.divs_M0.),.(.N0,.divs_N0.),.F
3e80 54 20 29 20 3d 20 64 61 74 61 00 20 20 20 20 00 64 65 66 20 6b 75 6d 6d 65 72 5f 64 65 67 72 65 T.).=.data......def.kummer_degre
3ea0 65 5f 66 72 6f 6d 5f 74 6f 74 61 6c 5f 74 61 62 6c 65 28 20 4d 2c 20 4e 2c 20 64 61 74 61 20 29 e_from_total_table(.M,.N,.data.)
3ec0 3a 00 23 20 74 61 62 6c 65 20 63 6f 6d 70 75 74 65 64 20 62 79 20 54 6f 74 61 6c 4b 75 6d 6d 65 :.#.table.computed.by.TotalKumme
3ee0 72 46 61 69 6c 75 72 65 2e 00 23 20 43 6f 6d 70 75 74 65 73 20 74 68 65 20 64 65 67 72 65 65 20 rFailure..#.Computes.the.degree.
3f00 6f 66 20 74 68 65 20 4b 75 6d 6d 65 72 20 65 78 74 65 6e 73 69 6f 6e 20 28 4d 2c 4e 29 2c 20 62 of.the.Kummer.extension.(M,N),.b
3f20 79 20 74 61 6b 69 6e 67 20 61 73 20 69 6e 70 75 74 20 74 68 65 00 00 20 20 20 20 72 65 74 75 72 y.taking.as.input.the......retur
3f40 6e 20 46 54 31 5b 69 5d 5b 6a 5d 00 20 20 20 20 6a 20 3d 20 64 69 76 73 5f 4d 30 2e 69 6e 64 65 n.FT1[i][j].....j.=.divs_M0.inde
3f60 78 28 20 67 63 64 28 20 4d 2c 20 4d 30 20 29 20 29 00 20 20 20 20 69 20 3d 20 64 69 76 73 5f 4e x(.gcd(.M,.M0.).).....i.=.divs_N
3f80 30 2e 69 6e 64 65 78 28 20 67 63 64 28 20 4e 2c 20 4e 30 20 29 20 29 00 00 20 20 20 20 20 20 20 0.index(.gcd(.N,.N0.).).........
3fa0 20 20 20 20 20 46 54 31 20 3d 20 74 6f 72 73 69 6f 6e 5f 74 61 62 6c 65 5f 6f 64 64 28 20 64 61 .....FT1.=.torsion_table_odd(.da
3fc0 74 61 20 29 00 20 20 20 20 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 46 ta.).........else:.............F
3fe0 54 31 20 3d 20 74 6f 72 73 69 6f 6e 5f 74 61 62 6c 65 5f 65 76 65 6e 28 20 64 61 74 61 20 29 00 T1.=.torsion_table_even(.data.).
4000 61 64 00 00 3f 0c 00 00 cb 0c 00 00 00 10 00 00 1c 00 00 00 00 00 00 00 e2 0f 00 00 c6 0f 00 00 ad..?...........................
4020 9f 0f 00 00 5a 0f 00 00 55 0f 00 00 32 0f 00 00 31 0f 00 00 fe 0e 00 00 af 0e 00 00 82 0e 00 00 ....Z...U...2...1...............
4040 64 0e 00 00 25 0e 00 00 0a 0e 00 00 f1 0d 00 00 e6 0d 00 00 d2 0d 00 00 d1 0d 00 00 b9 0d 00 00 d...%...........................
4060 74 0d 00 00 5f 0d 00 00 44 0d 00 00 32 0d 00 00 1c 0d 00 00 0a 0d 00 00 fc 0c 00 00 e3 0c 00 00 t..._...D...2...................
4080 e2 0c 00 00 cb 0c 00 00 8d 0c 00 00 8c 0c 00 00 57 0c 00 00 49 0c 00 00 2b 0c 00 00 18 0c 00 00 ................W...I...+.......
40a0 fb 0b 00 00 e0 0b 00 00 c3 0b 00 00 ab 0b 00 00 5a 0b 00 00 11 0b 00 00 f0 0a 00 00 c4 0a 00 00 ................Z...............
40c0 7d 0a 00 00 63 0a 00 00 32 0a 00 00 13 0a 00 00 e1 09 00 00 9d 09 00 00 66 09 00 00 4f 09 00 00 }...c...2...............f...O...
40e0 19 09 00 00 17 09 00 00 03 09 00 00 d4 08 00 00 9b 08 00 00 56 08 00 00 6f 08 00 00 6e 08 00 00 ....................V...o...n...
4100 b1 07 00 00 82 07 00 00 66 07 00 00 4d 07 00 00 4c 07 00 00 fd 06 00 00 fc 06 00 00 e4 06 00 00 ........f...M...L...............
4120 c4 06 00 00 88 06 00 00 7f 06 00 00 61 06 00 00 40 06 00 00 13 06 00 00 e4 05 00 00 db 05 00 00 ............a...@...............
4140 9e 05 00 00 9d 05 00 00 8f 05 00 00 73 05 00 00 51 05 00 00 37 05 00 00 19 05 00 00 0b 05 00 00 ............s...Q...7...........
4160 0a 05 00 00 ba 04 00 00 6c 04 00 00 39 04 00 00 ea 03 00 00 b7 03 00 00 6e 03 00 00 47 03 00 00 ........l...9...........n...G...
4180 31 03 00 00 25 03 00 00 17 03 00 00 f0 02 00 00 cd 02 00 00 b1 02 00 00 94 02 00 00 72 02 00 00 1...%.......................r...
41a0 55 02 00 00 3f 02 00 00 1c 02 00 00 08 02 00 00 07 02 00 00 bc 01 00 00 00 00 00 00 23 20 47 69 U...?.......................#.Gi
41c0 76 65 6e 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 20 6d 61 74 72 69 78 20 4d 20 6f 66 20 61 20 6c ven.the.exponent.matrix.M.of.a.l
41e0 69 73 74 20 6f 66 20 72 61 74 69 6f 6e 61 6c 20 6e 75 6d 62 65 72 73 20 42 2c 20 72 65 74 75 72 ist.of.rational.numbers.B,.retur
4200 6e 73 20 74 68 65 00 00 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 64 72 65 74 29 00 20 20 20 20 ns.the......return.(B,dret).....
4220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 5b 64 5d 5b 69 5d 20 2a 3d 20 6e 65 67 00 20 ................B[d][i].*=.neg..
4240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 20 20 20 ...............else:............
4260 20 20 20 20 20 20 20 20 20 64 72 65 74 20 3d 20 64 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .........dret.=.d...............
4280 20 20 20 20 20 20 6e 65 67 20 3d 20 42 5b 64 5d 5b 69 5d 00 20 20 20 20 20 20 20 20 20 20 20 20 ......neg.=.B[d][i].............
42a0 20 20 20 20 69 66 20 6e 65 67 20 3d 3d 20 30 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 ....if.neg.==.0:.............if.
42c0 42 5b 64 5d 5b 69 5d 20 3c 20 30 3a 00 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 B[d][i].<.0:.........for.i.in.ra
42e0 6e 67 65 28 6c 65 6e 28 42 5b 64 5d 29 29 3a 00 20 20 20 20 66 6f 72 20 64 20 69 6e 20 72 61 6e nge(len(B[d])):.....for.d.in.ran
4300 67 65 28 20 6c 65 6e 28 42 29 2d 31 2c 20 30 2c 20 2d 31 20 29 3a 00 20 20 20 20 64 72 65 74 20 ge(.len(B)-1,.0,.-1.):.....dret.
4320 3d 20 2d 31 00 20 20 20 20 6e 65 67 20 3d 20 30 00 64 65 66 20 61 64 6a 75 73 74 5f 73 69 67 6e =.-1.....neg.=.0.def.adjust_sign
4340 28 20 42 20 29 3a 00 23 20 61 6c 67 6f 72 69 74 68 6d 2c 20 73 6f 20 77 65 20 6b 65 65 70 20 74 (.B.):.#.algorithm,.so.we.keep.t
4360 68 65 6d 20 6e 65 67 61 74 69 76 65 2e 00 23 20 54 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20 hem.negative..#.The.sign.of.the.
4380 64 3d 30 20 65 6c 65 6d 65 6e 74 73 20 69 73 20 6a 75 73 74 20 69 67 6e 6f 72 65 64 20 69 6e 20 d=0.elements.is.just.ignored.in.
43a0 74 68 65 20 6f 74 68 65 72 20 73 74 65 70 73 20 6f 66 20 74 68 65 00 23 20 70 61 72 61 6d 65 74 the.other.steps.of.the.#.paramet
43c0 65 72 20 6f 66 20 74 68 65 20 6f 6e 6c 79 20 6e 65 67 61 74 69 76 65 20 65 6c 65 6d 65 6e 74 20 er.of.the.only.negative.element.
43e0 72 65 6d 61 69 6e 65 64 2e 00 23 20 52 65 74 75 72 6e 73 20 61 20 70 61 69 72 20 28 42 2c 64 29 remained..#.Returns.a.pair.(B,d)
4400 2c 20 77 68 65 72 65 20 42 20 69 73 20 74 68 65 20 75 70 64 61 74 65 64 20 62 61 73 69 73 20 61 ,.where.B.is.the.updated.basis.a
4420 6e 64 20 64 20 69 73 20 74 68 65 20 64 69 76 69 73 69 62 69 6c 69 74 79 00 23 20 62 61 73 69 73 nd.d.is.the.divisibility.#.basis
4440 20 69 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 6d 61 6b 65 5f .in.the.format.returned.by.make_
4460 67 6f 6f 64 5f 62 61 73 69 73 2e 00 23 20 6d 6f 73 74 20 6f 6e 65 20 6e 65 67 61 74 69 76 65 20 good_basis..#.most.one.negative.
4480 67 65 6e 65 72 61 74 6f 72 20 28 6f 66 20 70 6f 73 69 74 69 76 65 20 64 69 76 69 73 69 62 69 6c generator.(of.positive.divisibil
44a0 69 74 79 29 2e 20 54 68 65 20 69 6e 70 75 74 20 69 73 20 61 20 67 6f 6f 64 00 23 20 54 61 6b 65 ity)..The.input.is.a.good.#.Take
44c0 73 20 61 20 67 6f 6f 64 20 62 61 73 69 73 20 42 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 65 s.a.good.basis.B.and.adjusts.the
44e0 20 73 69 67 6e 20 6f 66 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 73 6f 20 74 68 61 74 20 74 68 .sign.of.the.elements.so.that.th
4500 65 72 65 20 69 73 20 61 74 00 00 20 20 20 20 72 65 74 75 72 6e 20 47 42 00 20 20 20 20 20 20 20 ere.is.at......return.GB........
4520 20 47 42 5b 64 5b 69 5d 5d 2e 61 70 70 65 6e 64 28 62 5b 69 5d 29 00 20 20 20 20 20 20 20 20 20 .GB[d[i]].append(b[i])..........
4540 20 20 20 47 42 2e 61 70 70 65 6e 64 28 5b 5d 29 00 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 ...GB.append([]).........while(.
4560 6c 65 6e 28 47 42 29 20 3c 3d 20 64 5b 69 5d 20 29 3a 00 20 20 20 20 66 6f 72 20 69 20 69 6e 20 len(GB).<=.d[i].):.....for.i.in.
4580 72 61 6e 67 65 28 6c 65 6e 28 64 29 29 3a 00 20 20 20 20 47 42 20 3d 20 5b 5b 5d 5d 00 00 20 20 range(len(d)):.....GB.=.[[]]....
45a0 20 20 20 20 20 20 63 6f 65 66 66 73 20 3d 20 66 69 6e 64 5f 63 6f 6d 62 69 6e 61 74 69 6f 6e 28 ......coeffs.=.find_combination(
45c0 20 65 78 70 6f 6e 65 6e 74 5f 6d 61 74 72 69 78 28 20 42 20 29 2c 20 6c 20 29 00 20 20 20 20 20 .exponent_matrix(.B.),.l.)......
45e0 20 20 20 00 20 20 20 20 20 20 20 20 42 5b 6d 61 78 69 5d 20 3d 20 61 62 73 28 62 5b 6d 61 78 69 ............B[maxi].=.abs(b[maxi
4600 5d 29 5e 28 31 2f 28 6c 5e 64 5b 6d 61 78 69 5d 29 29 00 20 20 20 20 20 20 20 20 64 5b 6d 61 78 ])^(1/(l^d[maxi])).........d[max
4620 69 5d 20 3d 20 64 69 76 69 73 69 62 69 6c 69 74 79 28 20 4d 5b 6d 61 78 69 5d 2c 20 6c 20 29 00 i].=.divisibility(.M[maxi],.l.).
4640 20 20 20 20 20 20 20 20 4d 20 3d 20 65 78 70 6f 6e 65 6e 74 5f 6d 61 74 72 69 78 28 20 62 20 29 ........M.=.exponent_matrix(.b.)
4660 00 20 20 20 20 20 20 20 20 62 5b 6d 61 78 69 5d 20 3d 20 6e 65 77 5f 65 6c 65 6d 65 6e 74 00 20 .........b[maxi].=.new_element..
4680 20 20 20 20 20 20 20 00 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 5f 65 6c 65 6d 65 6e 74 20 ....................new_element.
46a0 2a 3d 20 62 5b 69 5d 5e 28 20 78 5b 69 5d 20 2a 20 6c 5e 28 64 5b 6d 61 78 69 5d 2d 64 5b 69 5d *=.b[i]^(.x[i].*.l^(d[maxi]-d[i]
46c0 29 20 29 00 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 ).).........for.i.in.range(len(d
46e0 29 29 3a 00 20 20 20 20 20 20 20 20 6e 65 77 5f 65 6c 65 6d 65 6e 74 20 3d 20 31 00 00 20 20 20 )):.........new_element.=.1.....
4700 20 20 20 20 20 78 20 3d 20 5b 20 28 61 2f 63 6f 65 66 66 73 5b 6d 61 78 69 5d 29 2e 6c 69 66 74 .....x.=.[.(a/coeffs[maxi]).lift
4720 28 29 20 66 6f 72 20 61 20 69 6e 20 63 6f 65 66 66 73 20 5d 20 23 20 4e 6f 77 20 61 20 76 65 63 ().for.a.in.coeffs.].#.Now.a.vec
4740 74 6f 72 20 6f 66 20 69 6e 74 73 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 tor.of.ints..................max
4760 69 20 3d 20 69 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 64 20 3d 20 64 5b 69 i.=.i.................maxd.=.d[i
4780 5d 00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 64 5b 69 5d 20 3e 20 6d 61 78 64 20 61 6e 64 ].............if.d[i].>.maxd.and
47a0 20 63 6f 65 66 66 73 5b 69 5d 20 21 3d 20 30 3a 00 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 .coeffs[i].!=.0:.........for.i.i
47c0 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 29 29 3a 00 20 20 20 20 20 20 20 20 6d 61 78 64 20 3d 20 n.range(len(d)):.........maxd.=.
47e0 2d 31 00 20 20 20 20 20 20 20 20 6d 61 78 69 20 3d 20 2d 31 00 20 20 20 20 20 20 20 20 23 20 63 -1.........maxi.=.-1.........#.c
4800 6f 6d 62 69 6e 61 74 69 6f 6e 20 61 62 6f 76 65 29 20 68 61 73 20 6d 61 78 69 6d 61 6c 20 64 69 ombination.above).has.maximal.di
4820 76 69 73 69 62 69 6c 69 74 79 2e 00 20 20 20 20 20 20 20 20 23 20 43 6f 6d 70 75 74 65 73 20 77 visibility..........#.Computes.w
4840 68 69 63 68 20 62 61 73 69 73 20 65 6c 65 6d 65 6e 74 20 20 20 20 20 20 20 20 72 65 74 75 72 6e hich.basis.element........return
4860 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 42 2e 61 70 70 65 .(B,torsion)..............B.appe
4880 6e 64 28 67 72 29 00 20 20 20 20 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 20 20 72 nd(gr).........else:...........r
48a0 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 42 eturn.(B,torsion)..............B
48c0 2e 61 70 70 65 6e 64 28 67 72 29 00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 .append(gr).............return.(
48e0 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 42 2e 61 70 70 65 6e 64 B,torsion)..............B.append
4900 28 67 72 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 20 20 20 20 20 20 72 65 74 (gr....return.(B,torsio......ret
4920 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 42 2e 61 urn.(B,torsion)..............B.a
4940 70 70 65 6e 64 28 67 72 29 00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 ppend(gr)..........return.(B,tor
4960 73 69 6f 6e 29 00 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 sion).....return.(B,torsion)....
4980 20 20 20 20 20 20 20 20 20 20 42 2e 61 70 70 65 6e 64 28 67 72 29 00 20 20 20 20 20 20 20 20 20 ..........B.append(gr)..........
49a0 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 .return.(B,torsion).............
49c0 20 42 2e 61 70 70 65 6e 64 28 67 72 29 00 20 20 20 20 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 .B.append(gr).........else:.....
49e0 20 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 .....return.(B,torsion).........
4a00 20 20 20 20 20 42 2e 61 70 70 65 6e 64 28 67 72 29 00 20 20 20 20 20 72 65 74 75 72 6e 20 28 42 .....B.append(gr)......return.(B
4a20 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c ,torsion).............return.(B,
4a40 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 42 2e 61 70 70 65 6e 64 28 67 torsion)..............B.append(g
4a60 72 29 00 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 r).....return.(B,torsion).......
4a80 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 .return.(B,torsion).............
4aa0 20 42 2e 61 70 70 65 6e 64 28 67 72 29 00 20 20 20 20 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 .B.append(gr).........else:.....
4ac0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 ........return.(B,torsion)......
4ae0 20 20 20 20 20 20 20 20 42 2e 61 70 70 65 6e 64 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f ........B.append....return.(B,to
4b00 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 rsion)...............return.(B,t
4b20 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 42 2e 61 70 70 65 6e 64 28 67 72 orsion)..............B.append(gr
4b40 29 00 20 20 20 20 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 ).........else:...............re
4b60 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 42 2e turn.(B,torsion)..............B.
4b80 61 70 70 65 6e 64 28 67 72 29 00 20 20 20 20 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 append(gr).........else:........
4ba0 20 20 20 20 20 62 72 65 61 6b 00 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e .....break.....return.(B,torsion
4bc0 29 00 00 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 )......return.(B,torsion).......
4be0 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 72 ....return.(B,torsion).........r
4c00 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 72 65 74 75 eturn.(B,torsion)...........retu
4c20 72 6e 20 28 42 2c 74 6f 72 73 69 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e rn.(B,torsi....return.(B,torsion
4c40 29 00 00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 20 20 20 20 72 65 74 75 72 )............return.(B,....retur
4c60 6e 20 28 42 2c 74 6f 72 73 69 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 42 2e 61 70 70 n.(B,torsion)..............B.app
4c80 65 6e 64 28 67 72 29 00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 end(gr)..........return.(B,torsi
4ca0 6f 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 42 2e 61 70 70 65 6e 64 28 67 72 29 00 20 20 on)..............B.append(gr)...
4cc0 20 20 20 20 20 20 65 6c 73 65 3a 20 20 20 20 72 65 74 75 72 6e 20 28 42 2c 74 6f 72 73 69 6f 6e ......else:....return.(B,torsion
4ce0 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 42 2e 61 70 70 65 6e 64 28 67 72 29 00 20 20 20 20 )..............B.append(gr).....
4d00 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 00 20 20 20 20 ....else:.............break.....
4d20 20 20 20 20 65 6c 69 66 20 67 72 20 3d 3d 20 31 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 62 72 ....elif.gr.==.1:.............br
4d40 65 61 6b 00 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 72 73 69 6f 6e 20 3d 20 54 72 75 65 00 20 eak.............torsion.=.True..
4d60 20 20 20 20 20 20 20 69 66 20 67 72 20 3d 3d 20 2d 31 3a 00 20 20 20 20 20 20 20 20 67 72 20 3d .......if.gr.==.-1:.........gr.=
4d80 20 70 72 6f 64 75 63 74 28 20 5b 20 42 4d 5f 70 72 69 6d 65 73 5b 69 5d 5e 72 5b 69 5d 20 66 6f .product(.[.BM_primes[i]^r[i].fo
4da0 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 72 29 29 20 5d 20 29 00 20 20 20 20 66 6f 72 r.i.in.range(len(r)).].).....for
4dc0 20 72 20 69 6e 20 42 4d 2e 72 6f 77 73 28 29 3a 00 00 20 20 20 20 74 6f 72 73 69 6f 6e 20 3d 20 .r.in.BM.rows():......torsion.=.
4de0 46 61 6c 73 65 00 20 20 20 20 42 20 3d 20 5b 5d 00 20 20 20 20 42 4d 5f 70 72 69 6d 65 73 2e 61 False.....B.=.[].....BM_primes.a
4e00 70 70 65 6e 64 28 2d 31 29 00 20 20 20 20 42 4d 20 3d 20 42 4d 2e 65 63 68 65 6c 6f 6e 5f 66 6f ppend(-1).....BM.=.BM.echelon_fo
4e20 72 6d 28 29 00 20 20 20 20 28 42 4d 2c 42 4d 5f 70 72 69 6d 65 73 29 20 3d 20 65 78 70 6f 6e 65 rm().....(BM,BM_primes).=.expone
4e40 6e 74 5f 6d 61 74 72 69 78 5f 77 69 74 68 5f 73 69 67 6e 5f 61 6e 64 5f 70 72 69 6d 65 73 28 20 nt_matrix_with_sign_and_primes(.
4e60 47 20 29 00 64 65 66 20 67 65 6e 65 72 61 74 6f 72 73 5f 74 6f 5f 62 61 73 69 73 28 20 47 20 29 G.).def.generators_to_basis(.G.)
4e80 3a 00 23 20 69 73 20 74 72 75 65 20 69 66 20 2d 31 20 69 73 20 69 6e 20 47 20 61 6e 64 20 66 61 :.#.is.true.if.-1.is.in.G.and.fa
4ea0 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e 00 23 20 52 65 74 75 72 6e 73 20 61 20 70 61 69 72 20 lse.otherwise..#.Returns.a.pair.
4ec0 28 42 2c 74 6f 72 73 69 6f 6e 29 20 77 68 65 72 65 20 42 20 69 73 20 61 20 6c 69 73 74 20 6f 66 (B,torsion).where.B.is.a.list.of
4ee0 20 72 61 74 69 6f 6e 61 6c 20 6e 75 6d 62 65 72 73 20 61 6e 64 20 74 6f 72 73 69 6f 6e 00 23 20 .rational.numbers.and.torsion.#.
4f00 43 6f 6d 70 75 74 65 73 20 61 20 62 61 73 69 73 20 66 6f 72 20 47 20 66 72 6f 6d 20 61 20 73 65 Computes.a.basis.for.G.from.a.se
4f20 74 20 6f 66 20 67 65 6e 65 72 61 74 6f 72 73 2e 00 00 20 20 20 20 72 65 74 75 72 6e 20 4d 20 2d t.of.generators.......return.M.-
4f40 20 6d 20 2b 20 72 2a 6e 20 2d 20 73 75 6d 28 20 6e 69 20 29 00 20 20 20 20 00 20 20 20 20 4d 20 .m.+.r*n.-.sum(.ni.)..........M.
4f60 3d 20 6d 61 78 28 20 6d 2c 20 6d 61 78 28 20 5b 20 68 5b 69 5d 20 2b 20 6e 69 5b 69 5d 20 66 6f =.max(.m,.max(.[.h[i].+.ni[i].fo
4f80 72 20 69 20 69 6e 20 72 61 6e 67 65 28 20 6c 65 6e 28 20 70 20 29 20 29 20 5d 20 29 20 29 00 20 r.i.in.range(.len(.p.).).].).)..
4fa0 20 20 20 6e 69 20 3d 20 5b 20 6d 69 6e 28 20 6e 2c 20 78 5b 30 5d 20 29 20 66 6f 72 20 78 20 69 ...ni.=.[.min(.n,.x[0].).for.x.i
4fc0 6e 20 70 20 5d 00 20 20 20 20 68 20 3d 20 5b 20 78 5b 31 5d 20 66 6f 72 20 78 20 69 6e 20 70 20 n.p.].....h.=.[.x[1].for.x.in.p.
4fe0 5d 00 64 65 66 20 63 6f 6d 70 75 74 65 5f 76 6c 28 20 70 2c 20 6e 2c 20 6d 2c 20 72 20 29 3a 00 ].def.compute_vl(.p,.n,.m,.r.):.
5000 61 64 00 00 c3 05 00 00 ef 06 00 00 00 10 00 00 44 00 00 00 00 00 00 00 ff 0f 00 00 b1 0f 00 00 ad..............D...............
5020 63 0f 00 00 46 0f 00 00 29 0f 00 00 1e 0f 00 00 13 0f 00 00 f7 0e 00 00 d2 0e 00 00 bb 0e 00 00 c...F...).......................
5040 92 0e 00 00 91 0e 00 00 47 0e 00 00 02 0e 00 00 c9 0d 00 00 c8 0d 00 00 b0 0d 00 00 af 0d 00 00 ........G.......................
5060 5f 0d 00 00 28 0d 00 00 16 0d 00 00 04 0d 00 00 e4 0c 00 00 b5 0c 00 00 99 0c 00 00 80 0c 00 00 _...(...........................
5080 7f 0c 00 00 30 0c 00 00 2f 0c 00 00 17 0c 00 00 f7 0b 00 00 bb 0b 00 00 b2 0b 00 00 94 0b 00 00 ....0.../.......................
50a0 73 0b 00 00 46 0b 00 00 17 0b 00 00 0e 0b 00 00 d1 0a 00 00 d0 0a 00 00 c2 0a 00 00 a6 0a 00 00 s...F...........................
50c0 84 0a 00 00 6a 0a 00 00 4c 0a 00 00 3e 0a 00 00 3d 0a 00 00 ed 09 00 00 9f 09 00 00 6c 09 00 00 ....j...L...>...=...........l...
50e0 1d 09 00 00 ea 08 00 00 a1 08 00 00 7a 08 00 00 64 08 00 00 58 08 00 00 4a 08 00 00 23 08 00 00 ............z...d...X...J...#...
5100 00 08 00 00 e4 07 00 00 c7 07 00 00 a5 07 00 00 88 07 00 00 72 07 00 00 4f 07 00 00 3b 07 00 00 ....................r...O...;...
5120 3a 07 00 00 ef 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 :...............................
5140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
51a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
51c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
51e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
52a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
52c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
52e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
53a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
53c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
53e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
54a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
54c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
54e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
55a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
55c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
55e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
56a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
56c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
56e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 23 20 47 69 76 65 6e 20 74 68 65 20 65 78 70 6f 6e ...............#.Given.the.expon
5700 65 6e 74 20 6d 61 74 72 69 78 20 4d 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 72 61 74 69 6f 6e ent.matrix.M.of.a.list.of.ration
5720 61 6c 20 6e 75 6d 62 65 72 73 20 42 2c 20 72 65 74 75 72 6e 73 20 74 68 65 00 00 20 20 20 20 72 al.numbers.B,.returns.the......r
5740 65 74 75 72 6e 20 28 42 2c 64 72 65 74 29 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 eturn.(B,dret)..................
5760 20 20 20 42 5b 64 5d 5b 69 5d 20 2a 3d 20 6e 65 67 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...B[d][i].*=.neg...............
5780 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 72 65 74 ..else:.....................dret
57a0 20 3d 20 64 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 67 20 3d 20 42 .=.d.....................neg.=.B
57c0 5b 64 5d 5b 69 5d 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 6e 65 67 20 3d 3d [d][i].................if.neg.==
57e0 20 30 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 42 5b 64 5d 5b 69 5d 20 3c 20 30 3a 00 .0:.............if.B[d][i].<.0:.
5800 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 42 5b 64 5d 29 ........for.i.in.range(len(B[d])
5820 29 3a 00 20 20 20 20 66 6f 72 20 64 20 69 6e 20 72 61 6e 67 65 28 20 6c 65 6e 28 42 29 2d 31 2c ):.....for.d.in.range(.len(B)-1,
5840 20 30 2c 20 2d 31 20 29 3a 00 20 20 20 20 64 72 65 74 20 3d 20 2d 31 00 20 20 20 20 6e 65 67 20 .0,.-1.):.....dret.=.-1.....neg.
5860 3d 20 30 00 64 65 66 20 61 64 6a 75 73 74 5f 73 69 67 6e 28 20 42 20 29 3a 00 23 20 61 6c 67 6f =.0.def.adjust_sign(.B.):.#.algo
5880 72 69 74 68 6d 2c 20 73 6f 20 77 65 20 6b 65 65 70 20 74 68 65 6d 20 6e 65 67 61 74 69 76 65 2e rithm,.so.we.keep.them.negative.
58a0 00 23 20 54 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20 64 3d 30 20 65 6c 65 6d 65 6e 74 73 20 .#.The.sign.of.the.d=0.elements.
58c0 69 73 20 6a 75 73 74 20 69 67 6e 6f 72 65 64 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20 73 74 65 is.just.ignored.in.the.other.ste
58e0 70 73 20 6f 66 20 74 68 65 00 23 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68 65 20 6f 6e 6c ps.of.the.#.parameter.of.the.onl
5900 79 20 6e 65 67 61 74 69 76 65 20 65 6c 65 6d 65 6e 74 20 72 65 6d 61 69 6e 65 64 2e 00 23 20 52 y.negative.element.remained..#.R
5920 65 74 75 72 6e 73 20 61 20 70 61 69 72 20 28 42 2c 64 29 2c 20 77 68 65 72 65 20 42 20 69 73 20 eturns.a.pair.(B,d),.where.B.is.
5940 74 68 65 20 75 70 64 61 74 65 64 20 62 61 73 69 73 20 61 6e 64 20 64 20 69 73 20 74 68 65 20 64 the.updated.basis.and.d.is.the.d
5960 69 76 69 73 69 62 69 6c 69 74 79 00 23 20 62 61 73 69 73 20 69 6e 20 74 68 65 20 66 6f 72 6d 61 ivisibility.#.basis.in.the.forma
5980 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 6d 61 6b 65 5f 67 6f 6f 64 5f 62 61 73 69 73 2e 00 23 t.returned.by.make_good_basis..#
59a0 20 6d 6f 73 74 20 6f 6e 65 20 6e 65 67 61 74 69 76 65 20 67 65 6e 65 72 61 74 6f 72 20 28 6f 66 .most.one.negative.generator.(of
59c0 20 70 6f 73 69 74 69 76 65 20 64 69 76 69 73 69 62 69 6c 69 74 79 29 2e 20 54 68 65 20 69 6e 70 .positive.divisibility)..The.inp
59e0 75 74 20 69 73 20 61 20 67 6f 6f 64 00 23 20 54 61 6b 65 73 20 61 20 67 6f 6f 64 20 62 61 73 69 ut.is.a.good.#.Takes.a.good.basi
5a00 73 20 42 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74 68 65 20 s.B.and.adjusts.the.sign.of.the.
5a20 65 6c 65 6d 65 6e 74 73 20 73 6f 20 74 68 61 74 20 74 68 65 72 65 20 69 73 20 61 74 00 00 20 20 elements.so.that.there.is.at....
5a40 20 20 72 65 74 75 72 6e 20 47 42 00 20 20 20 20 20 20 20 20 47 42 5b 64 5b 69 5d 5d 2e 61 70 70 ..return.GB.........GB[d[i]].app
5a60 65 6e 64 28 62 5b 69 5d 29 00 20 20 20 20 20 20 20 20 20 20 20 20 47 42 2e 61 70 70 65 6e 64 28 end(b[i]).............GB.append(
5a80 5b 5d 29 00 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 6c 65 6e 28 47 42 29 20 3c 3d 20 64 5b []).........while(.len(GB).<=.d[
5aa0 69 5d 20 29 3a 00 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 29 29 i].):.....for.i.in.range(len(d))
5ac0 3a 00 20 20 20 20 47 42 20 3d 20 5b 5b 5d 5d 00 00 20 20 20 20 20 20 20 20 63 6f 65 66 66 73 20 :.....GB.=.[[]]..........coeffs.
5ae0 3d 20 66 69 6e 64 5f 63 6f 6d 62 69 6e 61 74 69 6f 6e 28 20 65 78 70 6f 6e 65 6e 74 5f 6d 61 74 =.find_combination(.exponent_mat
5b00 72 69 78 28 20 42 20 29 2c 20 6c 20 29 00 20 20 20 20 20 20 20 20 00 20 20 20 20 20 20 20 20 42 rix(.B.),.l.)..................B
5b20 5b 6d 61 78 69 5d 20 3d 20 61 62 73 28 62 5b 6d 61 78 69 5d 29 5e 28 31 2f 28 6c 5e 64 5b 6d 61 [maxi].=.abs(b[maxi])^(1/(l^d[ma
5b40 78 69 5d 29 29 00 20 20 20 20 20 20 20 20 64 5b 6d 61 78 69 5d 20 3d 20 64 69 76 69 73 69 62 69 xi])).........d[maxi].=.divisibi
5b60 6c 69 74 79 28 20 4d 5b 6d 61 78 69 5d 2c 20 6c 20 29 00 20 20 20 20 20 20 20 20 4d 20 3d 20 65 lity(.M[maxi],.l.).........M.=.e
5b80 78 70 6f 6e 65 6e 74 5f 6d 61 74 72 69 78 28 20 62 20 29 00 20 20 20 20 20 20 20 20 62 5b 6d 61 xponent_matrix(.b.).........b[ma
5ba0 78 69 5d 20 3d 20 6e 65 77 5f 65 6c 65 6d 65 6e 74 00 20 20 20 20 20 20 20 20 00 20 20 20 20 20 xi].=.new_element...............
5bc0 20 20 20 20 20 20 20 6e 65 77 5f 65 6c 65 6d 65 6e 74 20 2a 3d 20 62 5b 69 5d 5e 28 20 78 5b 69 .......new_element.*=.b[i]^(.x[i
5be0 5d 20 2a 20 6c 5e 28 64 5b 6d 61 78 69 5d 2d 64 5b 69 5d 29 20 29 00 20 20 20 20 20 20 20 20 66 ].*.l^(d[maxi]-d[i]).).........f
5c00 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 29 29 3a 00 20 20 20 20 20 20 20 20 6e or.i.in.range(len(d)):.........n
5c20 65 77 5f 65 6c 65 6d 65 6e 74 20 3d 20 31 00 00 20 20 20 20 20 20 20 20 78 20 3d 20 5b 20 28 61 ew_element.=.1..........x.=.[.(a
5c40 2f 63 6f 65 66 66 73 5b 6d 61 78 69 5d 29 2e 6c 69 66 74 28 29 20 66 6f 72 20 61 20 69 6e 20 63 /coeffs[maxi]).lift().for.a.in.c
5c60 6f 65 66 66 73 20 5d 20 23 20 4e 6f 77 20 61 20 76 65 63 74 6f 72 20 6f 66 20 69 6e 74 73 00 00 oeffs.].#.Now.a.vector.of.ints..
5c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 69 20 3d 20 69 00 20 20 20 20 20 20 20 ................maxi.=.i........
5ca0 20 20 20 20 20 20 20 20 20 6d 61 78 64 20 3d 20 64 5b 69 5d 00 20 20 20 20 20 20 20 20 20 20 20 .........maxd.=.d[i]............
5cc0 20 69 66 20 64 5b 69 5d 20 3e 20 6d 61 78 64 20 61 6e 64 20 63 6f 65 66 66 73 5b 69 5d 20 21 3d .if.d[i].>.maxd.and.coeffs[i].!=
5ce0 20 30 3a 00 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 .0:.........for.i.in.range(len(d
5d00 29 29 3a 00 20 20 20 20 20 20 20 20 6d 61 78 64 20 3d 20 2d 31 00 20 20 20 20 20 20 20 20 6d 61 )):.........maxd.=.-1.........ma
5d20 78 69 20 3d 20 2d 31 00 20 20 20 20 20 20 20 20 23 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 61 62 xi.=.-1.........#.combination.ab
5d40 6f 76 65 29 20 68 61 73 20 6d 61 78 69 6d 61 6c 20 64 69 76 69 73 69 62 69 6c 69 74 79 2e 00 20 ove).has.maximal.divisibility...
5d60 20 20 20 20 20 20 20 23 20 43 6f 6d 70 75 74 65 73 20 77 68 69 63 68 20 62 61 73 69 73 20 65 6c .......#.Computes.which.basis.el
5d80 65 6d 65 6e 74 20 28 77 69 74 68 20 6e 6f 6e 2d 7a 65 72 6f 20 63 6f 65 66 66 69 63 69 65 6e 74 ement.(with.non-zero.coefficient
5da0 20 69 6e 20 74 68 65 20 6c 69 6e 65 61 72 00 00 20 20 20 20 77 68 69 6c 65 20 63 6f 65 66 66 73 .in.the.linear......while.coeffs
5dc0 20 21 3d 20 5b 5d 3a 00 00 20 20 20 20 63 6f 65 66 66 73 20 3d 20 66 69 6e 64 5f 63 6f 6d 62 69 .!=.[]:......coeffs.=.find_combi
5de0 6e 61 74 69 6f 6e 28 20 65 78 70 6f 6e 65 6e 74 5f 6d 61 74 72 69 78 28 20 42 20 29 2c 20 6c 20 nation(.exponent_matrix(.B.),.l.
5e00 29 00 20 20 20 20 23 20 74 68 61 74 20 69 73 20 7a 65 72 6f 20 6d 6f 64 75 6c 6f 20 6c 2e 20 54 ).....#.that.is.zero.modulo.l..T
5e20 68 65 73 65 20 63 6f 65 66 66 69 63 69 65 6e 74 73 20 61 72 65 20 65 6c 65 6d 65 6e 74 73 20 6f hese.coefficients.are.elements.o
5e40 66 20 46 5f 6c 2e 00 20 20 20 20 23 20 43 6f 6d 70 75 74 65 73 20 74 68 65 20 63 6f 65 66 66 69 f.F_l......#.Computes.the.coeffi
5e60 65 63 69 65 6e 74 73 20 6f 66 20 61 20 6c 69 6e 65 61 72 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 ecients.of.a.linear.combination.
5e80 6f 66 20 74 68 65 20 72 6f 77 73 20 6f 66 20 4d 00 00 20 20 20 20 20 20 20 20 42 2e 61 70 70 65 of.the.rows.of.M..........B.appe
5ea0 6e 64 28 20 61 62 73 28 62 5b 69 5d 29 5e 28 31 2f 28 6c 5e 64 69 29 29 20 29 00 20 20 20 20 20 nd(.abs(b[i])^(1/(l^di)).)......
5ec0 20 20 20 64 2e 61 70 70 65 6e 64 28 20 64 69 20 29 00 20 20 20 20 20 20 20 20 64 69 20 3d 20 64 ...d.append(.di.).........di.=.d
5ee0 69 76 69 73 69 62 69 6c 69 74 79 28 20 4d 5b 69 5d 2c 20 6c 20 29 00 20 20 20 20 66 6f 72 20 69 ivisibility(.M[i],.l.).....for.i
5f00 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 62 29 29 3a 00 20 20 20 20 42 20 3d 20 5b 5d 00 20 20 .in.range(len(b)):.....B.=.[]...
5f20 20 20 64 20 3d 20 5b 5d 00 20 20 20 20 4d 20 3d 20 65 78 70 6f 6e 65 6e 74 5f 6d 61 74 72 69 78 ..d.=.[].....M.=.exponent_matrix
5f40 28 20 62 20 29 00 64 65 66 20 6d 61 6b 65 5f 67 6f 6f 64 5f 62 61 73 69 73 28 20 62 2c 20 6c 20 (.b.).def.make_good_basis(.b,.l.
5f60 29 3a 00 23 20 75 73 69 6e 67 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 6f 75 74 6c 69 6e 65 ):.#.using.the.algorithm.outline
5f80 64 20 69 6e 20 74 68 65 20 70 72 6f 6f 66 20 6f 66 20 54 68 65 6f 72 65 6d 20 31 34 20 6f 66 20 d.in.the.proof.of.Theorem.14.of.
5fa0 28 44 65 62 72 79 2d 50 65 72 75 63 63 61 29 2e 00 23 20 47 69 76 65 6e 20 61 6e 79 20 62 61 73 (Debry-Perucca)..#.Given.any.bas
5fc0 69 73 20 62 20 6f 66 20 61 20 67 72 6f 75 70 20 47 20 63 6f 6d 70 75 74 65 73 20 61 6e 20 6c 2d is.b.of.a.group.G.computes.an.l-
5fe0 67 6f 6f 64 20 62 61 73 69 73 20 66 6f 72 20 47 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 00 00 good.basis.for.G..This.is.done..
6000 61 64 00 00 b8 01 00 00 4c 03 00 00 00 10 00 00 5e 00 00 00 00 00 00 00 b4 0f 00 00 8d 0f 00 00 ad......L.......^...............
6020 6f 0f 00 00 4e 0f 00 00 24 0f 00 00 ff 0e 00 00 f5 0e 00 00 e3 0e 00 00 e2 0e 00 00 98 0e 00 00 o...N...$.......................
6040 87 0e 00 00 53 0e 00 00 39 0e 00 00 25 0e 00 00 da 0d 00 00 b5 0d 00 00 9c 0d 00 00 69 0d 00 00 ....S...9...%...............i...
6060 68 0d 00 00 1e 0d 00 00 04 0d 00 00 ed 0c 00 00 dd 0c 00 00 ad 0c 00 00 89 0c 00 00 6e 0c 00 00 h...........................n...
6080 60 0c 00 00 50 0c 00 00 38 0c 00 00 12 0c 00 00 f0 0b 00 00 c6 0b 00 00 a3 0b 00 00 87 0b 00 00 `...P...8.......................
60a0 6d 0b 00 00 6c 0b 00 00 20 0b 00 00 d4 0a 00 00 a3 0a 00 00 73 0a 00 00 5c 0a 00 00 4c 0a 00 00 m...l...............s...\...L...
60c0 1c 0a 00 00 f8 09 00 00 dd 09 00 00 cf 09 00 00 bf 09 00 00 a7 09 00 00 81 09 00 00 5f 09 00 00 ............................_...
60e0 35 09 00 00 12 09 00 00 04 09 00 00 eb 08 00 00 d9 08 00 00 c0 08 00 00 a4 08 00 00 7a 08 00 00 5...........................z...
6100 79 08 00 00 2c 08 00 00 0f 08 00 00 eb 07 00 00 ea 07 00 00 b3 07 00 00 82 07 00 00 33 07 00 00 y...,.......................3...
6120 0b 07 00 00 e6 06 00 00 c1 06 00 00 77 06 00 00 2b 06 00 00 e1 05 00 00 b6 05 00 00 6a 05 00 00 ............w...+...........j...
6140 56 05 00 00 2f 05 00 00 2e 05 00 00 04 05 00 00 03 05 00 00 ef 04 00 00 aa 04 00 00 95 04 00 00 V.../...........................
6160 94 04 00 00 79 04 00 00 78 04 00 00 4c 04 00 00 07 04 00 00 06 04 00 00 eb 03 00 00 b7 03 00 00 ....y...x...L...................
6180 81 03 00 00 7c 03 00 00 57 03 00 00 4c 03 00 00 58 03 00 00 4a 03 00 00 38 03 00 00 22 03 00 00 ....|...W...L...X...J...8..."...
61a0 10 03 00 00 f5 02 00 00 e0 02 00 00 9b 02 00 00 83 02 00 00 82 02 00 00 6e 02 00 00 63 02 00 00 ........................n...c...
61c0 4a 02 00 00 2f 02 00 00 f0 01 00 00 db 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 20 20 20 J.../...........................
61e0 4e 30 20 3d 20 31 00 20 20 20 20 23 20 43 6f 6d 20 20 20 20 4e 30 20 3d 20 31 00 20 20 20 20 23 N0.=.1.....#.Com....N0.=.1.....#
6200 20 43 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 62 6f 75 6e 64 73 20 4d 30 20 61 6e 64 20 4e 30 00 .Computing.the.bounds.M0.and.N0.
6220 20 20 20 20 00 20 20 20 20 61 64 65 6c 69 63 20 20 20 20 4e 30 20 3d 20 31 00 20 20 20 20 23 20 .........adelic....N0.=.1.....#.
6240 43 6f 6d 70 75 74 69 6e 67 20 20 20 20 20 4e 30 20 3d 20 31 00 20 20 20 20 23 20 43 6f 6d 70 75 Computing.....N0.=.1.....#.Compu
6260 74 69 6e 20 20 20 20 4e 30 20 3d 20 31 00 20 20 20 20 4e 30 20 3d 20 31 00 20 20 20 20 23 20 43 tin....N0.=.1.....N0.=.1.....#.C
6280 6f 6d 20 20 20 20 20 4e 30 20 3d 20 31 00 20 20 20 20 23 20 43 6f 6d 70 75 74 69 20 20 20 20 4e om.....N0.=.1.....#.Computi....N
62a0 30 20 3d 20 31 00 20 20 20 20 23 20 43 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 62 6f 75 6e 64 73 0.=.1.....#.Computing.the.bounds
62c0 20 4d 30 20 61 6e 64 20 4e 30 00 20 20 20 20 00 20 20 20 20 61 64 65 6c 69 63 5f 66 61 69 6c 75 .M0.and.N0..........adelic_failu
62e0 20 20 20 20 4e 30 20 3d 20 31 00 20 20 20 20 23 20 43 6f 6d 70 20 20 20 20 4e 30 20 3d 20 31 00 ....N0.=.1.....#.Comp....N0.=.1.
6300 20 20 20 20 23 20 43 6f 6d 70 75 74 69 6e 67 20 20 20 20 20 4e 30 20 3d 20 31 00 20 20 20 20 23 ....#.Computing.....N0.=.1.....#
6320 20 43 20 20 20 20 4e 30 20 3d 20 31 00 20 20 20 20 23 20 43 6f 6d 70 75 20 20 20 20 4e 30 20 3d .C....N0.=.1.....#.Compu....N0.=
6340 20 31 00 20 20 20 20 23 20 43 20 20 20 20 20 20 4e 30 20 3d 20 31 00 20 20 20 20 23 20 43 6f 6d .1.....#.C......N0.=.1.....#.Com
6360 70 75 74 69 6e 67 20 74 68 65 20 62 6f 75 6e 64 73 20 4d 30 20 61 6e 64 20 4e 30 00 20 20 20 20 puting.the.bounds.M0.and.N0.....
6380 00 20 20 20 20 61 64 65 6c 69 63 5f 66 61 69 6c 75 72 65 5f 74 61 62 6c 65 20 3d 20 61 64 65 6c .....adelic_failure_table.=.adel
63a0 69 63 5f 66 61 69 6c 75 72 65 5f 67 62 28 20 47 42 2c 20 64 20 29 00 20 20 20 20 28 47 42 2c 64 ic_failure_gb(.GB,.d.).....(GB,d
63c0 29 20 3d 20 61 64 6a 75 73 74 5f 73 69 67 6e 28 20 6d 61 6b 65 5f 67 6f 6f 64 5f 62 61 73 69 73 ).=.adjust_sign(.make_good_basis
63e0 28 20 42 2c 20 32 20 29 20 29 00 20 20 20 20 23 20 43 6f 6d 70 75 74 65 20 61 64 65 6c 69 63 20 (.B,.2.).).....#.Compute.adelic.
6400 64 61 74 61 2e 00 00 20 20 20 20 28 20 62 61 64 5f 70 72 69 6d 65 73 2c 20 6c 5f 61 64 69 63 5f data.......(.bad_primes,.l_adic_
6420 66 61 69 6c 75 72 65 5f 74 61 62 6c 65 20 29 20 3d 20 74 6f 74 61 6c 5f 6c 5f 61 64 69 63 5f 66 failure_table.).=.total_l_adic_f
6440 61 69 6c 75 72 65 28 20 42 20 29 00 20 20 20 20 23 20 43 6f 6d 70 75 74 65 20 6c 2d 61 64 69 63 ailure(.B.).....#.Compute.l-adic
6460 20 64 61 74 61 20 28 73 74 72 61 69 67 68 74 66 6f 72 77 61 72 64 29 00 00 20 20 20 20 72 20 3d .data.(straightforward)......r.=
6480 20 6c 65 6e 28 42 29 20 23 20 52 61 6e 6b 20 6f 66 20 47 00 00 20 20 20 20 20 20 20 20 72 65 74 .len(B).#.Rank.of.G..........ret
64a0 75 72 6e 20 46 61 6c 73 65 00 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 47 20 69 73 20 74 6f urn.False.........print."G.is.to
64c0 72 73 69 6f 6e 2e 20 54 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 69 73 20 63 79 63 6c 6f 74 6f 6d rsion..The.extension.is.cyclotom
64e0 69 63 2e 20 53 74 6f 70 70 69 6e 67 2e 22 00 20 20 20 20 69 66 20 6c 65 6e 28 42 29 20 3d 3d 20 ic..Stopping.".....if.len(B).==.
6500 30 3a 00 00 20 20 20 20 42 2c 20 74 6f 72 73 69 6f 6e 20 3d 20 67 65 6e 65 72 61 74 6f 72 73 5f 0:......B,.torsion.=.generators_
6520 74 6f 5f 62 61 73 69 73 28 20 47 20 29 00 00 64 65 66 20 74 6f 74 61 6c 5f 6b 75 6d 6d 65 72 5f to_basis(.G.)..def.total_kummer_
6540 66 61 69 6c 75 72 65 28 20 47 2c 20 6f 75 74 70 75 74 20 29 3a 00 23 20 72 65 74 75 72 6e 20 61 failure(.G,.output.):.#.return.a
6560 6e 79 20 76 61 6c 75 65 2e 00 23 20 49 66 20 6f 75 74 70 75 74 20 69 73 20 54 72 75 65 2c 20 6f ny.value..#.If.output.is.True,.o
6580 75 74 70 75 74 73 20 74 68 69 73 20 64 61 74 61 20 69 6e 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 utputs.this.data.in.a.human-read
65a0 61 62 6c 65 20 77 61 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 00 23 20 20 20 63 6f 6d 70 75 74 able.way.and.does.not.#...comput
65c0 65 64 20 66 6f 72 20 61 20 74 6f 72 73 69 6f 6e 2d 66 72 65 65 20 70 61 72 74 20 6f 66 20 47 2e ed.for.a.torsion-free.part.of.G.
65e0 00 23 20 20 20 64 69 76 69 73 6f 72 20 6f 66 20 4d 30 20 61 6e 64 20 6e 20 69 73 20 74 68 65 20 .#...divisor.of.M0.and.n.is.the.
6600 6a 2d 74 68 20 64 69 76 69 73 6f 72 20 6f 66 20 4e 30 20 28 69 6e 20 74 68 65 20 63 6f 6d 70 75 j-th.divisor.of.N0.(in.the.compu
6620 74 65 64 20 6c 69 73 74 29 29 00 23 20 20 20 64 65 67 72 65 65 20 6f 66 20 51 5f 7b 6d 2c 6e 7d ted.list)).#...degree.of.Q_{m,n}
6640 20 28 69 2e 65 2e 2c 20 74 68 65 20 4b 75 6d 6d 65 72 20 66 61 69 6c 75 72 65 20 61 74 20 6d 2c .(i.e.,.the.Kummer.failure.at.m,
6660 6e 2c 20 77 68 65 72 65 20 6d 20 69 73 20 74 68 65 20 69 2d 74 68 00 23 20 2d 20 44 20 69 73 20 n,.where.m.is.the.i-th.#.-.D.is.
6680 61 20 74 61 62 6c 65 20 46 2c 20 77 68 65 72 65 20 46 5b 6a 5d 5b 69 5d 20 69 73 20 74 68 65 20 a.table.F,.where.F[j][i].is.the.
66a0 72 61 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 70 68 69 28 6d 29 6e 5e 72 20 61 6e 64 20 74 68 65 ration.between.phi(m)n^r.and.the
66c0 00 23 20 2d 20 4e 4e 20 69 73 20 74 68 65 20 70 61 69 72 20 28 4e 30 2c 64 69 76 69 73 6f 72 73 .#.-.NN.is.the.pair.(N0,divisors
66e0 28 4e 30 29 29 00 23 20 2d 20 4d 4d 20 69 73 20 74 68 65 20 70 61 69 72 20 28 4d 30 2c 64 69 76 (N0)).#.-.MM.is.the.pair.(M0,div
6700 69 73 6f 72 73 28 4d 30 29 29 00 23 20 20 20 74 6f 72 73 69 6f 6e 29 20 6f 72 20 46 61 6c 73 65 isors(M0)).#...torsion).or.False
6720 20 28 69 73 20 69 74 20 64 6f 65 73 20 6e 6f 74 29 2e 00 23 20 2d 20 74 20 69 73 20 61 20 70 61 .(is.it.does.not)..#.-.t.is.a.pa
6740 69 72 2c 20 77 68 65 72 65 20 74 5b 30 5d 20 69 73 20 74 68 65 20 72 61 6e 6b 20 6f 66 20 47 20 ir,.where.t[0].is.the.rank.of.G.
6760 61 6e 64 20 74 5b 31 5d 20 69 73 20 65 69 74 68 65 72 20 54 72 75 65 20 28 69 66 20 47 20 68 61 and.t[1].is.either.True.(if.G.ha
6780 73 00 23 20 49 66 20 6f 75 74 70 75 74 3d 46 61 6c 73 65 2c 20 72 65 74 75 72 6e 73 20 61 20 34 s.#.If.output=False,.returns.a.4
67a0 2d 75 70 6c 65 20 28 74 2c 4d 4d 2c 4e 4e 2c 44 29 3a 00 23 20 49 6e 70 75 74 3a 20 61 6e 79 20 -uple.(t,MM,NN,D):.#.Input:.any.
67c0 73 65 74 20 6f 66 20 67 65 6e 65 72 61 74 6f 72 73 20 66 6f 72 20 61 20 73 75 62 67 72 6f 75 70 set.of.generators.for.a.subgroup
67e0 20 47 20 6f 66 20 51 2a 2e 00 00 20 20 20 20 74 6f 74 61 6c 5f 6b 75 6d 6d 65 72 5f 66 61 69 6c .G.of.Q*.......total_kummer_fail
6800 75 72 65 28 20 47 2c 20 54 72 75 65 20 29 00 64 65 66 20 54 6f 74 61 6c 4b 75 6d 6d 65 72 46 61 ure(.G,.True.).def.TotalKummerFa
6820 69 6c 75 72 65 28 20 47 20 29 3a 00 23 20 54 68 69 73 20 69 73 20 61 20 77 72 61 70 70 65 72 20 ilure(.G.):.#.This.is.a.wrapper.
6840 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 74 6f 74 61 6c 5f 6b 75 6d 6d 65 72 5f 66 61 69 6c 75 72 function.for.total_kummer_failur
6860 65 28 20 47 2c 20 54 72 75 65 20 29 2c 20 73 65 65 20 62 65 6c 6f 77 2e 00 00 20 20 20 20 72 65 e(.G,.True.),.see.below.......re
6880 74 75 72 6e 20 28 20 6d 61 74 72 69 78 28 20 72 6f 77 73 20 29 2c 20 70 72 69 6d 65 5f 6c 69 73 turn.(.matrix(.rows.),.prime_lis
68a0 74 20 29 00 20 20 20 20 20 20 20 20 72 6f 77 73 2e 61 70 70 65 6e 64 28 20 72 6f 77 67 20 29 00 t.).........rows.append(.rowg.).
68c0 20 20 20 20 20 20 20 20 72 6f 77 67 2e 61 70 70 65 6e 64 28 20 73 20 29 00 20 20 20 20 20 20 20 ........rowg.append(.s.)........
68e0 20 20 20 20 20 73 20 3d 20 31 00 20 20 20 20 20 20 20 20 69 66 20 73 67 6e 28 67 29 20 3d 3d 20 .....s.=.1.........if.sgn(g).==.
6900 2d 31 3a 00 20 20 20 20 20 20 20 20 73 20 3d 20 30 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -1:.........s.=.0...............
6920 20 20 20 20 20 20 72 6f 77 67 5b 69 5d 20 3d 20 66 5b 31 5d 00 20 20 20 20 20 20 20 20 20 20 20 ......rowg[i].=.f[1]............
6940 20 20 20 20 20 69 66 20 66 5b 30 5d 20 3d 3d 20 70 72 69 6d 65 5f 6c 69 73 74 5b 69 5d 3a 00 20 .....if.f[0].==.prime_list[i]:..
6960 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 20 6e 70 20 29 3a ...........for.i.in.range(.np.):
6980 00 20 20 20 20 20 20 20 20 66 6f 72 20 66 20 69 6e 20 6c 69 73 74 28 20 66 61 63 74 6f 72 28 20 .........for.f.in.list(.factor(.
69a0 67 20 29 20 29 3a 00 20 20 20 20 20 20 20 20 72 6f 77 67 20 3d 20 5b 30 5d 20 2a 20 6e 70 00 20 g.).):.........rowg.=.[0].*.np..
69c0 20 20 20 66 6f 72 20 67 20 69 6e 20 42 3a 00 20 20 20 20 72 6f 77 73 20 3d 20 5b 5d 00 20 20 20 ...for.g.in.B:.....rows.=.[]....
69e0 20 6e 70 20 3d 20 6c 65 6e 28 20 70 72 69 6d 65 5f 6c 69 73 74 20 29 00 20 20 20 20 70 72 69 6d .np.=.len(.prime_list.).....prim
6a00 65 5f 6c 69 73 74 20 3d 20 6c 69 73 74 28 20 70 72 69 6d 65 5f 6c 69 73 74 20 29 00 20 20 20 20 e_list.=.list(.prime_list.).....
6a20 20 20 20 20 70 72 69 6d 65 5f 6c 69 73 74 20 7c 3d 20 73 65 74 28 20 70 72 69 6d 65 5f 66 61 63 ....prime_list.|=.set(.prime_fac
6a40 74 6f 72 73 28 20 67 20 29 20 29 00 20 20 20 20 66 6f 72 20 67 20 69 6e 20 42 3a 00 20 20 20 20 tors(.g.).).....for.g.in.B:.....
6a60 70 72 69 6d 65 5f 6c 69 73 74 20 3d 20 73 65 74 28 29 00 64 65 66 20 65 78 70 6f 6e 65 6e 74 5f prime_list.=.set().def.exponent_
6a80 6d 61 74 72 69 78 5f 77 69 74 68 5f 73 69 67 6e 5f 61 6e 64 5f 70 72 69 6d 65 73 28 20 42 20 29 matrix_with_sign_and_primes(.B.)
6aa0 3a 20 00 23 20 6c 69 73 74 20 6f 66 20 70 72 69 6d 65 73 20 61 70 70 65 61 72 69 6e 67 20 69 6e :..#.list.of.primes.appearing.in
6ac0 20 74 68 65 20 66 61 63 74 6f 72 69 7a 61 74 69 6f 6e 2e 00 23 20 52 65 74 75 72 6e 73 20 61 20 .the.factorization..#.Returns.a.
6ae0 70 61 69 72 20 28 4d 2c 4c 29 20 77 68 65 72 65 20 4d 20 69 73 20 74 68 65 20 6d 6f 64 69 66 69 pair.(M,L).where.M.is.the.modifi
6b00 65 64 20 65 78 70 6f 6e 65 6e 74 20 6d 61 74 72 69 78 20 61 6e 64 20 4c 20 69 73 20 74 68 65 00 ed.exponent.matrix.and.L.is.the.
6b20 23 20 43 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 20 6d 61 74 72 69 78 2c #.Computing.the.exponent.matrix,
6b40 20 62 75 74 20 6b 65 65 70 69 6e 67 20 61 6e 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 20 66 6f 72 .but.keeping.an.extra.column.for
6b60 20 74 68 65 20 73 69 67 6e 73 2e 00 00 20 20 20 20 72 65 74 75 72 6e 20 6d 61 74 72 69 78 28 20 .the.signs.......return.matrix(.
6b80 72 6f 77 73 20 29 00 20 20 20 20 20 20 20 20 72 6f 77 73 2e 61 70 70 65 6e 64 28 20 72 6f 77 67 rows.).........rows.append(.rowg
6ba0 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 67 5b 69 5d 20 3d .).....................rowg[i].=
6bc0 20 66 5b 31 5d 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 66 5b 30 5d 20 3d 3d .f[1].................if.f[0].==
6be0 20 70 72 69 6d 65 5f 6c 69 73 74 5b 69 5d 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 .prime_list[i]:.............for.
6c00 69 20 69 6e 20 72 61 6e 67 65 28 20 6e 70 20 29 3a 00 20 20 20 20 20 20 20 20 66 6f 72 20 66 20 i.in.range(.np.):.........for.f.
6c20 69 6e 20 6c 69 73 74 28 20 66 61 63 74 6f 72 28 20 67 20 29 20 29 3a 00 20 20 20 20 20 20 20 20 in.list(.factor(.g.).):.........
6c40 72 6f 77 67 20 3d 20 5b 30 5d 20 2a 20 6e 70 00 20 20 20 20 66 6f 72 20 67 20 69 6e 20 42 3a 00 rowg.=.[0].*.np.....for.g.in.B:.
6c60 20 20 20 20 72 6f 77 73 20 3d 20 5b 5d 00 20 20 20 20 6e 70 20 3d 20 6c 65 6e 28 20 70 72 69 6d ....rows.=.[].....np.=.len(.prim
6c80 65 5f 6c 69 73 74 20 29 00 20 20 20 20 70 72 69 6d 65 5f 6c 69 73 74 20 3d 20 6c 69 73 74 28 20 e_list.).....prime_list.=.list(.
6ca0 70 72 69 6d 65 5f 6c 69 73 74 20 29 00 20 20 20 20 20 20 20 20 70 72 69 6d 65 5f 6c 69 73 74 20 prime_list.).........prime_list.
6cc0 7c 3d 20 73 65 74 28 20 70 72 69 6d 65 5f 66 61 63 74 6f 72 73 28 20 67 20 29 20 29 00 20 20 20 |=.set(.prime_factors(.g.).)....
6ce0 20 66 6f 72 20 67 20 69 6e 20 42 3a 00 20 20 20 20 70 72 69 6d 65 5f 6c 69 73 74 20 3d 20 73 65 .for.g.in.B:.....prime_list.=.se
6d00 74 28 29 00 64 65 66 20 65 78 70 6f 6e 65 6e 74 5f 6d 61 74 72 69 78 28 20 42 20 29 3a 00 23 20 t().def.exponent_matrix(.B.):.#.
6d20 46 6f 72 20 61 20 67 69 76 65 6e 20 73 65 74 20 6f 66 20 6e 6f 6e 2d 7a 65 72 6f 20 72 61 74 69 For.a.given.set.of.non-zero.rati
6d40 6f 6e 61 6c 73 20 42 2c 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 22 65 78 70 6f 6e 65 6e 74 20 onals.B,.computes.the."exponent.
6d60 6d 61 74 72 69 78 22 00 00 20 20 20 20 72 65 74 75 72 6e 20 6d 69 6e 28 20 5b 20 76 61 6c 75 61 matrix"......return.min(.[.valua
6d80 74 69 6f 6e 28 20 78 2c 20 6c 20 29 20 66 6f 72 20 78 20 69 6e 20 41 20 5d 20 29 00 20 20 20 20 tion(.x,.l.).for.x.in.A.].).....
6da0 20 20 20 20 72 65 74 75 72 6e 20 2b 49 6e 66 69 6e 69 74 79 00 20 20 20 20 20 20 20 20 70 72 69 ....return.+Infinity.........pri
6dc0 6e 74 20 22 52 65 74 75 72 6e 69 6e 67 20 2b 49 6e 66 69 6e 69 74 79 2e 22 00 20 20 20 20 20 20 nt."Returning.+Infinity.".......
6de0 20 20 70 72 69 6e 74 20 22 57 61 72 6e 69 6e 67 3a 20 63 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 ..print."Warning:.computing.the.
6e00 64 69 76 69 73 69 62 69 6c 69 74 79 20 6f 66 20 61 20 74 6f 72 73 69 6f 6e 20 65 6c 65 6d 65 6e divisibility.of.a.torsion.elemen
6e20 74 2e 22 2c 00 20 20 20 20 69 66 20 6c 65 6e 28 41 29 20 3d 3d 20 30 3a 00 64 65 66 20 64 69 76 t.",.....if.len(A).==.0:.def.div
6e40 69 73 69 62 69 6c 69 74 79 28 20 41 2c 20 6c 20 29 3a 00 23 20 52 65 74 75 72 6e 73 20 74 68 65 isibility(.A,.l.):.#.Returns.the
6e60 20 6d 69 6e 69 6d 61 6c 20 6c 2d 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 78 70 6f .minimal.l-valuation.of.the.expo
6e80 6e 65 6e 74 73 2e 00 23 20 66 61 63 74 6f 72 69 7a 61 74 69 6f 6e 2e 00 23 20 41 20 72 61 74 69 nents..#.factorization..#.A.rati
6ea0 6f 6e 61 6c 20 6e 75 6d 62 65 72 20 6d 75 73 74 20 62 65 20 67 69 76 65 6e 20 61 73 20 61 20 6c onal.number.must.be.given.as.a.l
6ec0 69 73 74 20 6f 66 20 65 78 70 6f 6e 65 6e 74 73 20 6f 66 20 70 72 69 6d 65 73 20 69 6e 20 69 74 ist.of.exponents.of.primes.in.it
6ee0 73 00 00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 5d 00 20 20 20 20 65 6c 73 65 3a 00 20 s..........return.[].....else:..
6f00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 2e 6b 65 72 6e 65 6c 28 29 2e 62 61 73 69 73 28 29 .......return.M.kernel().basis()
6f20 5b 30 5d 00 20 20 20 20 69 66 20 4d 2e 72 61 6e 6b 28 29 20 21 3d 20 6d 69 6e 28 20 4d 2e 64 69 [0].....if.M.rank().!=.min(.M.di
6f40 6d 65 6e 73 69 6f 6e 73 28 29 20 29 3a 00 20 20 20 20 4d 20 3d 20 4d 2e 63 68 61 6e 67 65 5f 72 mensions().):.....M.=.M.change_r
6f60 69 6e 67 28 20 47 46 28 20 6c 20 29 20 29 00 64 65 66 20 66 69 6e 64 5f 63 6f 6d 62 69 6e 61 74 ing(.GF(.l.).).def.find_combinat
6f80 69 6f 6e 28 20 4d 2c 20 6c 20 29 3a 00 23 20 74 68 65 20 42 5b 69 5d 20 61 72 65 20 73 74 72 6f ion(.M,.l.):.#.the.B[i].are.stro
6fa0 6e 67 6c 79 20 6c 2d 69 6e 64 65 70 65 6e 64 65 6e 74 2e 00 23 20 63 6f 65 66 66 69 63 69 65 6e ngly.l-independent..#.coefficien
6fc0 74 73 20 6f 66 20 61 20 6c 69 6e 65 61 72 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 74 68 61 74 20 ts.of.a.linear.combination.that.
6fe0 69 73 20 77 65 61 6b 6c 79 20 6c 2d 64 69 76 69 73 69 62 6c 65 2c 20 6f 72 20 5b 5d 20 69 66 00 is.weakly.l-divisible,.or.[].if.
7000 61 64 00 00 20 00 00 00 cc 01 00 00 00 10 00 00 64 00 00 00 00 00 00 00 ea 0f 00 00 dd 0f 00 00 ad..............d...............
7020 91 0f 00 00 81 0f 00 00 4d 0f 00 00 43 0f 00 00 31 0f 00 00 ee 0e 00 00 e1 0e 00 00 91 0e 00 00 ........M...C...1...............
7040 45 0e 00 00 f6 0d 00 00 d1 0d 00 00 c1 0d 00 00 74 0d 00 00 38 0d 00 00 0f 0d 00 00 05 0d 00 00 E...............t...8...........
7060 b6 0c 00 00 a5 0c 00 00 7f 0c 00 00 72 0c 00 00 71 0c 00 00 51 0c 00 00 29 0c 00 00 07 0c 00 00 ............r...q...Q...).......
7080 d1 0b 00 00 bd 0b 00 00 b0 0b 00 00 af 0b 00 00 9f 0b 00 00 4e 0b 00 00 20 0b 00 00 df 0a 00 00 ....................N...........
70a0 ce 0a 00 00 cd 0a 00 00 a1 0a 00 00 52 0a 00 00 02 0a 00 00 ca 09 00 00 7e 09 00 00 32 09 00 00 ............R...........~...2...
70c0 e3 08 00 00 9c 08 00 00 71 08 00 00 50 08 00 00 2c 08 00 00 00 08 00 00 da 07 00 00 9d 07 00 00 ........q...P...,...............
70e0 85 07 00 00 74 07 00 00 73 07 00 00 56 07 00 00 55 07 00 00 11 07 00 00 10 07 00 00 e9 06 00 00 ....t...s...V...U...............
7100 b3 06 00 00 a6 06 00 00 96 06 00 00 6d 06 00 00 61 06 00 00 4d 06 00 00 3b 06 00 00 2b 06 00 00 ............m...a...M...;...+...
7120 10 06 00 00 fa 05 00 00 e3 05 00 00 d5 05 00 00 c4 05 00 00 9f 05 00 00 8b 05 00 00 66 05 00 00 ............................f...
7140 27 05 00 00 14 05 00 00 ee 04 00 00 c4 04 00 00 a1 04 00 00 62 04 00 00 4e 04 00 00 3a 04 00 00 '...................b...N...:...
7160 eb 03 00 00 cc 03 00 00 cb 03 00 00 b0 03 00 00 86 03 00 00 58 03 00 00 2e 03 00 00 e7 02 00 00 ....................X...........
7180 cb 02 00 00 ca 02 00 00 b9 02 00 00 b8 02 00 00 7b 02 00 00 48 02 00 00 04 02 00 00 f7 01 00 00 ................{...H...........
71a0 e7 01 00 00 cc 01 00 00 cb 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
71c0 00 00 00 00 00 00 00 00 00 00 00 00 20 20 20 20 20 20 20 20 69 66 20 28 4d 2f 4e 29 20 25 20 32 ....................if.(M/N).%.2
71e0 20 3d 3d 20 30 3a 00 20 20 20 20 69 66 20 74 6f 72 73 69 6f 6e 3a 00 20 20 20 20 46 54 31 20 3d .==.0:.....if.torsion:.....FT1.=
7200 20 46 54 00 20 20 20 20 28 20 28 20 72 2c 20 74 6f 72 73 69 6f 6e 20 29 2c 20 28 20 4d 30 2c 20 .FT.....(.(.r,.torsion.),.(.M0,.
7220 64 69 76 73 5f 4d 30 20 29 2c 20 28 20 4e 30 2c 20 64 69 76 73 5f 4e 30 20 29 2c 20 46 54 20 29 divs_M0.),.(.N0,.divs_N0.),.FT.)
7240 20 3d 20 64 61 74 61 00 64 65 66 20 6b 75 6d 6d 65 72 5f 66 61 69 6c 75 72 65 5f 66 72 6f 6d 5f .=.data.def.kummer_failure_from_
7260 74 6f 74 61 6c 5f 74 61 62 6c 65 28 20 4d 2c 20 4e 2c 20 64 61 74 61 20 29 3a 00 23 20 45 78 74 total_table(.M,.N,.data.):.#.Ext
7280 72 61 63 74 73 20 61 20 73 70 65 63 69 66 69 63 20 76 61 6c 75 65 20 6f 66 20 66 61 69 6c 75 72 racts.a.specific.value.of.failur
72a0 65 20 66 72 6f 6d 20 74 68 65 20 74 6f 74 61 6c 20 74 61 62 6c 65 2e 00 00 20 20 20 20 20 20 20 e.from.the.total.table..........
72c0 20 70 72 69 6e 74 20 22 22 00 00 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 6c 69 6a .print.""..............print.lij
72e0 73 74 5f 6f 64 64 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c st_odd.........................l
7300 69 6a 73 74 5f 6f 64 64 2e 61 70 70 65 6e 64 28 20 28 20 64 69 76 73 5f 4d 30 5b 6a 5d 2c 20 64 ijst_odd.append(.(.divs_M0[j],.d
7320 69 76 73 5f 4e 30 5b 69 5d 20 29 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ivs_N0[i].).)...................
7340 20 20 69 66 20 46 54 5f 6f 64 64 5b 69 5d 5b 6a 5d 20 3d 3d 20 66 3a 00 20 20 20 20 20 20 20 20 ..if.FT_odd[i][j].==.f:.........
7360 20 20 20 20 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 69 76 73 5f ........for.j.in.range(len(divs_
7380 4d 30 29 29 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 M0)):.............for.i.in.range
73a0 28 6c 65 6e 28 64 69 76 73 5f 4e 30 29 29 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6a 73 (len(divs_N0)):.............lijs
73c0 74 5f 6f 64 64 20 3d 20 5b 5d 00 00 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 66 t_odd.=.[]..............print."f
73e0 6f 6c 6c 6f 77 69 6e 67 3a 22 00 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 6f 72 ollowing:".............print."or
7400 20 69 66 20 4d 2f 4e 20 69 73 20 4f 44 44 20 61 6e 64 20 28 67 63 64 28 4d 2c 4d 30 29 29 2c 67 .if.M/N.is.ODD.and.(gcd(M,M0)),g
7420 63 64 28 4e 2c 4e 30 29 29 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 22 2c 00 20 20 20 20 20 20 cd(N,N0)).is.one.of.the",.......
7440 20 20 69 66 20 74 6f 72 73 69 6f 6e 3a 00 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 6c 69 6a 73 ..if.torsion:.........print.lijs
7460 74 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6a 73 74 2e 61 70 70 65 t.....................lijst.appe
7480 6e 64 28 20 28 20 64 69 76 73 5f 4d 30 5b 6a 5d 2c 20 64 69 76 73 5f 4e 30 5b 69 5d 20 29 20 29 nd(.(.divs_M0[j],.divs_N0[i].).)
74a0 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 46 54 31 5b 69 5d 5b 6a 5d 20 3d 3d .................if.FT1[i][j].==
74c0 20 66 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 65 28 6c .f:.............for.j.in.range(l
74e0 65 6e 28 64 69 76 73 5f 4d 30 29 29 3a 00 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 en(divs_M0)):.........for.i.in.r
7500 61 6e 67 65 28 6c 65 6e 28 64 69 76 73 5f 4e 30 29 29 3a 00 20 20 20 20 20 20 20 20 6c 69 6a 73 ange(len(divs_N0)):.........lijs
7520 74 20 3d 20 5b 5d 00 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 28 67 63 64 28 4d 2c 4d 30 29 t.=.[].........print."(gcd(M,M0)
7540 2c 67 63 64 28 4e 2c 4e 30 29 29 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 ,gcd(N,N0)).is.one.of.the.follow
7560 69 6e 67 3a 22 00 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 4d 2f 4e 20 69 73 20 ing:".............print."M/N.is.
7580 45 56 45 4e 20 61 6e 64 22 2c 00 20 20 20 20 20 20 20 20 69 66 20 74 6f 72 73 69 6f 6e 3a 00 20 EVEN.and",.........if.torsion:..
75a0 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 46 61 69 6c 75 72 65 20 69 73 22 2c 20 66 2c 20 22 69 .......print."Failure.is",.f,."i
75c0 66 22 2c 00 20 20 20 20 66 6f 72 20 66 20 69 6e 20 70 66 3a 00 20 20 20 20 70 66 2e 73 6f 72 74 f",.....for.f.in.pf:.....pf.sort
75e0 28 29 00 20 20 20 20 70 66 20 3d 20 6c 69 73 74 28 73 65 74 28 70 66 29 29 00 20 20 20 20 20 20 ().....pf.=.list(set(pf)).......
7600 20 20 20 20 20 20 70 66 20 2b 3d 20 72 6f 77 00 20 20 20 20 20 20 20 20 66 6f 72 20 72 6f 77 20 ......pf.+=.row.........for.row.
7620 69 6e 20 46 54 5f 6f 64 64 3a 00 20 20 20 20 69 66 20 74 6f 72 73 69 6f 6e 3a 00 20 20 20 20 20 in.FT_odd:.....if.torsion:......
7640 20 20 20 70 66 20 2b 3d 20 72 6f 77 00 20 20 20 20 66 6f 72 20 72 6f 77 20 69 6e 20 46 54 31 3a ...pf.+=.row.....for.row.in.FT1:
7660 00 20 20 20 20 70 66 20 3d 20 5b 5d 00 20 20 20 20 20 20 20 20 46 54 31 20 3d 20 74 6f 72 73 69 .....pf.=.[].........FT1.=.torsi
7680 6f 6e 5f 74 61 62 6c 65 5f 65 76 65 6e 28 20 64 61 74 61 20 29 00 20 20 20 20 69 66 20 74 6f 72 on_table_even(.data.).....if.tor
76a0 73 69 6f 6e 3a 00 20 20 20 20 46 54 31 20 3d 20 46 54 00 20 20 20 20 23 20 46 54 31 20 69 73 20 sion:.....FT1.=.FT.....#.FT1.is.
76c0 65 69 74 68 65 72 20 46 54 20 6f 72 20 46 54 5f 65 76 65 6e 20 69 6e 20 74 68 65 20 74 6f 72 73 either.FT.or.FT_even.in.the.tors
76e0 69 6f 6e 20 63 61 73 65 00 20 20 20 20 46 54 5f 6f 64 64 20 3d 20 74 6f 72 73 69 6f 6e 5f 74 61 ion.case.....FT_odd.=.torsion_ta
7700 62 6c 65 5f 6f 64 64 28 20 64 61 74 61 20 29 00 00 20 20 20 20 28 20 28 20 72 2c 20 74 6f 72 73 ble_odd(.data.)......(.(.r,.tors
7720 69 6f 6e 20 29 2c 20 28 20 4d 30 2c 20 64 69 76 73 5f 4d 30 20 29 2c 20 28 20 4e 30 2c 20 64 69 ion.),.(.M0,.divs_M0.),.(.N0,.di
7740 76 73 5f 4e 30 20 29 2c 20 46 54 20 29 20 3d 20 64 61 74 61 00 00 64 65 66 20 70 72 69 6e 74 5f vs_N0.),.FT.).=.data..def.print_
7760 63 61 73 65 5f 6c 69 73 74 28 20 64 61 74 61 20 29 3a 00 00 20 20 20 20 20 20 20 20 70 72 69 6e case_list(.data.):..........prin
7780 74 20 22 22 00 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 74 61 62 6c 65 28 74 74 29 00 20 20 20 t."".........print.table(tt)....
77a0 20 20 20 20 20 20 20 20 20 74 74 2e 61 70 70 65 6e 64 28 20 5b 20 64 69 76 73 5f 4e 30 5b 69 5d .........tt.append(.[.divs_N0[i]
77c0 20 5d 20 2b 20 5b 22 7c 22 5d 20 20 2b 20 6e 65 77 5f 46 54 5b 69 5d 20 29 00 20 20 20 20 20 20 .].+.["|"]..+.new_FT[i].).......
77e0 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 69 76 73 5f 4e 30 29 29 3a 00 ..for.i.in.range(len(divs_N0)):.
7800 20 20 20 20 20 20 20 20 74 74 2e 61 70 70 65 6e 64 28 20 22 2d 22 20 2a 20 28 6c 65 6e 28 64 69 ........tt.append(."-".*.(len(di
7820 76 73 5f 4d 30 29 2b 32 29 20 29 00 20 20 20 20 20 20 20 20 74 74 20 3d 20 5b 20 5b 22 22 2c 22 vs_M0)+2).).........tt.=.[.["","
7840 7c 22 5d 20 2b 20 64 69 76 73 5f 4d 30 20 5d 00 20 20 20 20 20 20 20 20 23 20 50 72 69 6e 74 69 |"].+.divs_M0.].........#.Printi
7860 6e 67 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 00 20 20 20 20 20 20 20 20 6e 65 77 5f 46 54 20 ng.the.new.table.........new_FT.
7880 3d 20 74 6f 72 73 69 6f 6e 5f 74 61 62 6c 65 5f 6f 64 64 28 20 64 61 74 61 20 29 00 20 20 20 20 =.torsion_table_odd(.data.).....
78a0 20 20 20 20 23 20 77 65 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 63 6f 6d 70 75 74 65 64 20 76 ....#.we.have.already.computed.v
78c0 69 61 20 6b 75 6d 6d 65 72 5f 64 65 67 72 65 65 5f 66 72 6f 6d 5f 74 6f 74 61 6c 5f 74 61 62 6c ia.kummer_degree_from_total_tabl
78e0 65 2e 00 20 20 20 20 20 20 20 20 23 20 66 61 69 6c 75 72 65 2e 20 54 68 69 73 20 69 73 20 6e 6f e..........#.failure..This.is.no
7900 74 20 74 6f 6f 20 69 6e 65 66 66 69 63 69 65 6e 74 2c 20 73 69 6e 63 65 20 77 65 20 63 61 6e 20 t.too.inefficient,.since.we.can.
7920 75 73 65 20 74 68 65 20 64 61 74 61 20 74 68 61 74 00 20 20 20 20 20 20 20 20 23 20 65 61 73 69 use.the.data.that.........#.easi
7940 65 72 20 74 6f 20 6a 75 73 74 20 63 6f 6d 70 75 74 65 20 74 68 65 20 64 65 67 72 65 65 20 65 76 er.to.just.compute.the.degree.ev
7960 65 72 79 20 74 69 6d 65 2c 20 61 6e 64 20 74 68 65 6e 20 64 65 64 75 63 65 20 74 68 65 00 20 20 ery.time,.and.then.deduce.the...
7980 20 20 20 20 20 20 23 20 48 6f 77 65 76 65 72 2c 20 64 75 65 20 74 6f 20 70 72 6f 62 6c 65 6d 73 ......#.However,.due.to.problems
79a0 20 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 66 6f 72 20 62 69 67 67 65 72 .in.reading.the.table.for.bigger
79c0 20 4d 2c 20 69 74 20 69 73 00 20 20 20 20 20 20 20 20 23 20 20 20 28 69 66 20 4d 20 69 73 20 65 .M,.it.is.........#...(if.M.is.e
79e0 76 65 6e 29 20 6f 72 20 69 74 73 20 64 6f 75 62 6c 65 20 28 69 66 20 4d 20 69 73 20 6f 64 64 29 ven).or.its.double.(if.M.is.odd)
7a00 2e 00 20 20 20 20 20 20 20 20 23 20 20 20 63 61 73 65 20 69 73 20 65 69 74 68 65 72 20 74 68 65 ..........#...case.is.either.the
7a20 20 73 61 6d 65 20 61 73 20 74 68 61 74 20 66 6f 72 20 28 32 4d 2c 4e 29 20 69 6e 20 74 68 65 20 .same.as.that.for.(2M,N).in.the.
7a40 74 6f 72 73 69 6f 6e 2d 66 72 65 65 20 63 61 73 65 00 20 20 20 20 20 20 20 20 23 20 20 20 41 20 torsion-free.case.........#...A.
7a60 6c 69 74 74 6c 65 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 65 78 65 72 63 69 73 65 3a 20 74 68 65 little.translation.exercise:.the
7a80 20 66 61 69 6c 75 72 65 20 61 74 20 28 4d 2c 4e 29 20 69 6e 20 74 68 65 20 74 6f 72 73 69 6f 6e .failure.at.(M,N).in.the.torsion
7aa0 00 20 20 20 20 20 20 20 20 23 20 41 20 67 6f 6f 64 20 73 74 72 61 74 65 67 79 20 69 73 20 74 68 .........#.A.good.strategy.is.th
7ac0 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 00 00 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 22 00 20 e.following:..........print.""..
7ae0 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 54 68 69 73 20 74 61 62 6c 65 20 63 61 6e 20 62 65 20 .......print."This.table.can.be.
7b00 72 65 61 64 20 65 78 61 63 74 6c 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20 6f 6e 65 2e 22 00 read.exactly.as.the.first.one.".
7b20 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 63 61 73 65 20 74 68 65 20 71 75 6f 74 69 65 6e 74 ........print."case.the.quotient
7b40 20 4d 2f 4e 20 69 73 20 4f 44 44 2e 22 00 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 54 68 65 .M/N.is.ODD.".........print."The
7b60 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65 20 74 6f 74 61 6c .following.table.shows.the.total
7b80 20 66 61 69 6c 75 72 65 20 6f 66 20 4b 75 6d 6d 65 72 20 64 65 67 72 65 65 73 20 69 6e 22 00 20 .failure.of.Kummer.degrees.in"..
7ba0 20 20 20 69 66 20 74 6f 72 73 69 6f 6e 3a 00 00 20 20 20 20 70 72 69 6e 74 20 22 22 00 20 20 20 ...if.torsion:......print.""....
7bc0 20 70 72 69 6e 74 20 74 61 62 6c 65 28 74 74 29 00 20 20 20 20 20 20 20 20 74 74 2e 61 70 70 65 .print.table(tt).........tt.appe
7be0 6e 64 28 20 5b 20 64 69 76 73 5f 4e 30 5b 69 5d 20 5d 20 2b 20 5b 22 7c 22 5d 20 20 2b 20 46 54 nd(.[.divs_N0[i].].+.["|"]..+.FT
7c00 31 5b 69 5d 20 29 00 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 69 1[i].).....for.i.in.range(len(di
7c20 76 73 5f 4e 30 29 29 3a 00 20 20 20 20 74 74 2e 61 70 70 65 6e 64 28 20 22 2d 22 20 2a 20 28 6c vs_N0)):.....tt.append(."-".*.(l
7c40 65 6e 28 64 69 76 73 5f 4d 30 29 2b 32 29 20 29 00 20 20 20 20 74 74 20 3d 20 5b 20 5b 22 22 2c en(divs_M0)+2).).....tt.=.[.["",
7c60 22 7c 22 5d 20 2b 20 64 69 76 73 5f 4d 30 20 5d 00 00 20 20 20 20 70 72 69 6e 74 20 22 22 00 20 "|"].+.divs_M0.]......print.""..
7c80 20 20 20 70 72 69 6e 74 20 22 77 68 65 72 65 20 72 20 69 73 20 74 68 65 20 72 61 6e 6b 20 6f 66 ...print."where.r.is.the.rank.of
7ca0 20 47 2e 22 00 20 20 20 20 20 20 20 20 46 54 31 20 3d 20 46 54 00 20 20 20 20 20 20 20 20 70 72 .G.".........FT1.=.FT.........pr
7cc0 69 6e 74 20 22 49 6e 20 74 68 69 73 20 63 61 73 65 20 28 47 20 69 73 20 74 6f 72 73 69 6f 6e 2d int."In.this.case.(G.is.torsion-
7ce0 66 72 65 65 29 20 77 65 20 68 61 76 65 20 65 64 28 4d 2c 4e 29 20 3d 20 70 68 69 28 4d 29 2a 4e free).we.have.ed(M,N).=.phi(M)*N
7d00 5e 72 2c 22 00 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 46 54 31 20 3d 20 74 6f 72 ^r,".....else:.........FT1.=.tor
7d20 73 69 6f 6e 5f 74 61 62 6c 65 5f 65 76 65 6e 28 20 64 61 74 61 20 29 00 20 20 20 20 20 20 20 20 sion_table_even(.data.).........
7d40 70 72 69 6e 74 20 22 77 68 65 72 65 20 65 3d 31 20 69 66 20 4e 20 69 73 20 65 76 65 6e 20 61 6e print."where.e=1.if.N.is.even.an
7d60 64 20 65 3d 30 20 69 66 20 4e 20 69 73 20 6f 64 64 2e 22 00 20 20 20 20 20 20 20 20 70 72 69 6e d.e=0.if.N.is.odd.".........prin
7d80 74 20 22 49 6e 20 74 68 69 73 20 63 61 73 65 20 28 2d 31 20 69 73 20 69 6e 20 47 29 2c 20 77 65 t."In.this.case.(-1.is.in.G),.we
7da0 20 68 61 76 65 20 65 64 28 4d 2c 4e 29 20 3d 20 32 5e 65 2a 70 68 69 28 4d 29 2a 4e 5e 72 2c 22 .have.ed(M,N).=.2^e*phi(M)*N^r,"
7dc0 00 20 20 20 20 69 66 20 74 6f 72 73 69 6f 6e 3a 00 20 20 20 20 70 72 69 6e 74 20 22 6f 66 20 74 .....if.torsion:.....print."of.t
7de0 68 65 20 4b 75 6d 6d 65 72 20 65 78 74 65 6e 73 69 6f 6e 2e 22 00 20 20 20 20 70 72 69 6e 74 20 he.Kummer.extension.".....print.
7e00 22 73 69 6d 70 6c 79 20 63 6f 6d 70 75 74 69 6e 67 20 65 64 28 4d 2c 4e 29 20 2f 20 66 2c 20 77 "simply.computing.ed(M,N)./.f,.w
7e20 68 65 72 65 20 65 64 28 4d 2c 4e 29 20 69 73 20 74 68 65 20 65 78 70 65 63 74 65 64 20 64 65 67 here.ed(M,N).is.the.expected.deg
7e40 72 65 65 22 00 20 20 20 20 70 72 69 6e 74 20 22 74 68 65 20 76 61 6c 75 65 20 66 20 28 66 61 69 ree".....print."the.value.f.(fai
7e60 6c 75 72 65 29 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 61 74 20 28 67 63 64 28 4e 2c 4e 30 29 lure).of.the.entry.at.(gcd(N,N0)
7e80 2c 67 63 64 28 4d 2c 4d 30 29 29 20 61 6e 64 22 00 20 20 20 20 70 72 69 6e 74 20 22 54 68 65 20 ,gcd(M,M0)).and".....print."The.
7ea0 64 65 67 72 65 65 20 6f 66 20 74 68 65 20 4b 75 6d 6d 65 72 20 65 78 74 65 6e 73 69 6f 6e 20 28 degree.of.the.Kummer.extension.(
7ec0 4d 2c 4e 29 20 63 61 6e 20 62 65 20 65 78 74 72 61 63 74 65 64 20 62 79 20 74 61 6b 69 6e 67 22 M,N).can.be.extracted.by.taking"
7ee0 00 20 20 20 20 70 72 69 6e 74 20 22 22 00 20 20 20 20 70 72 69 6e 74 20 22 43 6f 6c 75 6d 6e 73 .....print."".....print."Columns
7f00 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 76 61 6c 75 65 73 20 6f 66 20 4d 2c 20 72 6f 77 73 .correspond.to.values.of.M,.rows
7f20 20 74 6f 20 76 61 6c 75 65 73 20 6f 66 20 4e 22 00 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 .to.values.of.N".........print."
7f40 2e 22 00 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 69 6e 5c 6e .".....else:.........print."in\n
7f60 20 63 61 73 65 20 74 68 65 20 71 75 6f 74 69 65 6e 74 20 4d 2f 4e 20 69 73 20 45 56 45 4e 2e 22 .case.the.quotient.M/N.is.EVEN."
7f80 00 20 20 20 20 69 66 20 74 6f 72 73 69 6f 6e 3a 00 20 20 20 20 70 72 69 6e 74 20 22 54 68 65 20 .....if.torsion:.....print."The.
7fa0 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65 20 74 6f 74 61 6c 20 following.table.shows.the.total.
7fc0 66 61 69 6c 75 72 65 20 6f 66 20 4b 75 6d 6d 65 72 20 64 65 67 72 65 65 73 22 2c 20 00 20 20 20 failure.of.Kummer.degrees",.....
7fe0 20 70 72 69 6e 74 20 22 22 00 20 20 20 20 70 72 69 6e 74 20 22 4e 5f 30 20 3d 22 2c 20 4e 30 00 .print."".....print."N_0.=",.N0.
8000 61 64 00 00 42 00 00 00 9e 01 00 00 00 10 00 00 50 00 00 00 00 00 00 00 c7 0f 00 00 83 0f 00 00 ad..B...........P...............
8020 40 0f 00 00 2a 0f 00 00 ed 0e 00 00 c3 0e 00 00 94 0e 00 00 93 0e 00 00 44 0e 00 00 21 0e 00 00 @...*...................D...!...
8040 f8 0d 00 00 d3 0d 00 00 b0 0d 00 00 89 0d 00 00 88 0d 00 00 71 0d 00 00 64 0d 00 00 19 0d 00 00 ....................q...d.......
8060 e4 0c 00 00 d1 0c 00 00 af 0c 00 00 ae 0c 00 00 67 0c 00 00 4c 0c 00 00 2e 0c 00 00 0d 0c 00 00 ................g...L...........
8080 e7 0b 00 00 c6 0b 00 00 c5 0b 00 00 77 0b 00 00 2d 0b 00 00 de 0a 00 00 8e 0a 00 00 41 0a 00 00 ............w...-...........A...
80a0 36 0a 00 00 e6 09 00 00 96 09 00 00 7b 09 00 00 7a 09 00 00 4c 09 00 00 4b 09 00 00 2a 09 00 00 6...........{...z...L...K...*...
80c0 da 08 00 00 bc 08 00 00 9c 08 00 00 83 08 00 00 82 08 00 00 35 08 00 00 e9 07 00 00 be 07 00 00 ....................5...........
80e0 81 07 00 00 52 07 00 00 1b 07 00 00 0e 07 00 00 c1 06 00 00 75 06 00 00 48 06 00 00 0f 06 00 00 ....R...............u...H.......
8100 f8 05 00 00 f7 05 00 00 a8 05 00 00 95 05 00 00 4a 05 00 00 32 05 00 00 31 05 00 00 e7 04 00 00 ................J...2...1.......
8120 9a 04 00 00 4f 04 00 00 36 04 00 00 e6 03 00 00 98 03 00 00 48 03 00 00 fa 02 00 00 c7 02 00 00 ....O...6...........H...........
8140 80 02 00 00 5a 02 00 00 31 02 00 00 15 02 00 00 d3 01 00 00 9e 01 00 00 9d 01 00 00 00 00 00 00 ....Z...1.......................
8160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 20 ................................
81a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 20 3d 20 73 70 65 63 69 61 6c 5f 65 6d ..................m.=.special_em
81c0 62 65 64 28 20 6e 65 77 5f 73 70 65 63 69 61 6c 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 20 bed(.new_special.)..............
81e0 20 20 20 20 20 20 20 6e 65 77 5f 73 70 65 63 69 61 6c 20 3d 20 28 20 6e 2b 31 2c 20 73 70 65 63 .......new_special.=.(.n+1,.spec
8200 69 61 6c 5f 65 6c 65 6d 65 6e 74 5b 31 5d 20 2a 20 73 20 29 00 20 20 20 20 20 20 20 20 20 20 20 ial_element[1].*.s.)............
8220 20 20 20 20 20 66 6f 72 20 73 20 69 6e 20 53 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .....for.s.in.S:................
8240 20 69 6e 74 65 72 73 65 63 74 69 6e 67 5f 51 64 4d 20 3d 20 46 61 6c 73 65 00 20 20 20 20 20 20 .intersecting_QdM.=.False.......
8260 20 20 20 20 20 20 20 20 20 20 6e 6f 74 68 69 6e 67 5f 74 6f 5f 64 6f 20 3d 20 46 61 6c 73 65 00 ..........nothing_to_do.=.False.
8280 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 73 70 65 63 69 61 6c 5f 65 6c 65 6d 65 6e 74 20 21 ............if.special_element.!
82a0 3d 20 28 31 2c 31 29 20 61 6e 64 20 73 70 65 63 69 61 6c 5f 65 6c 65 6d 65 6e 74 5b 30 5d 20 3d =.(1,1).and.special_element[0].=
82c0 3d 20 6e 2b 31 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 61 6e 6f 74 68 65 72 20 66 61 63 =.n+1:.............#.another.fac
82e0 74 6f 72 20 6f 66 20 32 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 69 73 2e 00 20 20 20 20 20 20 tor.of.2.because.of.this........
8300 20 20 20 20 20 20 23 20 6f 66 20 74 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 ......#.of.the.existence.of.the.
8320 73 70 65 63 69 61 6c 20 65 6c 65 6d 65 6e 74 2c 20 62 75 74 74 68 65 6e 20 77 65 20 77 6f 75 6c special.element,.butthen.we.woul
8340 64 20 6c 6f 6f 73 65 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 77 69 74 68 20 51 5f 7b 32 5e d.loose.............#.with.Q_{2^
8360 6e 7d 20 28 6e 20 6d 75 73 74 20 62 65 20 32 29 3b 20 73 6f 20 77 65 20 77 6f 75 6c 64 20 64 6f n}.(n.must.be.2);.so.we.would.do
8380 75 62 6c 65 20 74 68 65 20 64 65 67 72 65 65 20 62 65 63 61 75 73 65 00 20 20 20 20 20 20 20 20 uble.the.degree.because.........
83a0 20 20 20 20 23 20 6e 6f 74 68 69 6e 67 20 74 6f 20 64 6f 3a 20 69 6e 20 66 61 63 74 20 5c 7a 65 ....#.nothing.to.do:.in.fact.\ze
83c0 74 61 5f 38 20 32 20 65 6d 62 65 64 73 20 69 6e 20 51 5f 34 2c 20 77 68 69 63 68 20 63 6f 69 6e ta_8.2.embeds.in.Q_4,.which.coin
83e0 63 69 64 65 73 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 49 66 20 61 6e 79 20 6f 66 20 74 68 cides.............#.If.any.of.th
8400 65 6d 20 69 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 5c 7a 65 74 61 5f 38 20 32 71 20 66 6f 72 em.is.of.the.form.\zeta_8.2q.for
8420 20 71 20 61 20 73 71 75 61 72 65 2c 20 74 68 65 72 65 20 69 73 00 20 20 20 20 20 20 20 20 20 20 .q.a.square,.there.is...........
8440 20 20 23 20 73 68 6f 72 74 6c 69 73 74 2e 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 6d 75 6c ..#.shortlist..............#.mul
8460 74 69 70 6c 79 69 6e 67 20 74 68 65 20 67 69 76 65 6e 20 65 6c 65 6d 65 6e 74 20 77 69 74 68 20 tiplying.the.given.element.with.
8480 74 68 65 20 6f 74 68 65 72 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74 68 65 00 20 20 20 20 20 20 the.other.elements.of.the.......
84a0 20 20 20 20 20 20 23 20 57 65 20 68 61 76 65 20 74 6f 20 63 6f 6e 73 69 64 65 72 20 61 6c 6c 20 ......#.We.have.to.consider.all.
84c0 70 6f 73 73 69 62 6c 65 20 73 70 65 63 69 61 6c 20 65 6c 65 6d 65 6e 74 73 20 61 72 69 73 69 6e possible.special.elements.arisin
84e0 67 20 66 72 6f 6d 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 49 66 20 77 65 20 68 61 76 65 20 g.from.............#.If.we.have.
8500 61 20 73 70 65 63 69 61 6c 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 69 73 20 6c 65 76 65 6c 2c a.special.element.in.this.level,
8520 20 77 65 20 63 6f 6e 73 69 64 65 72 20 69 74 2e 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .we.consider.it.................
8540 20 20 72 20 3d 20 72 2f 32 00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 38 20 69 6e 20 48 20 ..r.=.r/2.............if.8.in.H.
8560 61 6e 64 20 64 4d 20 25 20 38 20 3d 3d 20 30 20 61 6e 64 20 28 6e 20 3e 3d 20 33 20 6f 72 20 28 and.dM.%.8.==.0.and.(n.>=.3.or.(
8580 6e 20 3d 3d 20 32 20 61 6e 64 20 6e 20 3c 3d 20 64 29 29 3a 00 20 20 20 20 20 20 20 20 20 20 20 n.==.2.and.n.<=.d)):............
85a0 20 23 20 51 5f 34 2e 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 57 65 20 6c 6f 6f 73 65 20 61 .#.Q_4..............#.We.loose.a
85c0 20 66 61 63 74 6f 72 20 6f 66 20 32 20 69 66 20 77 65 20 68 61 76 65 20 73 71 72 74 28 32 29 20 .factor.of.2.if.we.have.sqrt(2).
85e0 69 6e 20 51 5f 38 20 6f 72 20 5c 7a 65 74 61 5f 38 20 32 20 69 6e 00 00 20 20 20 20 20 20 20 20 in.Q_8.or.\zeta_8.2.in..........
8600 20 20 20 20 20 20 20 20 72 20 2a 3d 20 32 00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 6e 20 ........r.*=.2.............if.n.
8620 3c 3d 20 64 20 61 6e 64 20 64 4d 20 25 20 28 32 5e 28 6e 2b 31 29 29 20 3d 3d 20 30 20 61 6e 64 <=.d.and.dM.%.(2^(n+1)).==.0.and
8640 20 6e 20 3e 20 31 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 62 79 20 68 61 76 69 6e 67 20 .n.>.1:.............#.by.having.
8660 2d 31 20 69 6e 20 74 68 65 20 73 68 6f 72 74 6c 69 73 74 2e 00 20 20 20 20 20 20 20 20 20 20 20 -1.in.the.shortlist.............
8680 20 23 20 64 75 65 20 74 6f 20 74 68 65 20 6e 65 67 61 74 69 76 65 20 6e 65 67 65 72 61 74 6f 72 .#.due.to.the.negative.negerator
86a0 2e 20 49 6e 20 63 61 73 65 20 6e 3d 31 2c 20 74 68 69 73 20 69 73 20 61 63 63 6f 75 6e 74 65 64 ..In.case.n=1,.this.is.accounted
86c0 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 57 65 20 64 6f 75 62 6c 65 20 6e 20 69 6e 20 63 61 .............#.We.double.n.in.ca
86e0 73 65 20 61 20 6e 65 77 20 72 6f 6f 74 73 20 6f 66 20 75 6e 69 74 79 20 65 6e 74 65 72 73 20 74 se.a.new.roots.of.unity.enters.t
8700 68 65 20 63 79 63 6c 6f 74 6f 6d 69 63 00 20 20 20 20 20 20 20 20 20 20 20 20 00 20 20 20 20 20 he.cyclotomic...................
8720 20 20 20 20 20 20 20 72 20 3d 20 6c 65 6e 28 20 5b 20 62 20 66 6f 72 20 62 20 69 6e 20 48 20 69 .......r.=.len(.[.b.for.b.in.H.i
8740 66 20 64 4d 20 25 20 62 20 3d 3d 20 30 20 5d 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 48 20 f.dM.%.b.==.0.].).............H.
8760 3d 20 5b 20 63 79 63 5f 65 6d 62 65 64 28 20 73 20 29 20 66 6f 72 20 73 20 69 6e 20 53 20 5d 20 =.[.cyc_embed(.s.).for.s.in.S.].
8780 00 20 20 20 20 20 20 20 20 20 20 20 20 53 20 3d 20 5b 20 70 72 6f 64 75 63 74 28 73 29 20 66 6f .............S.=.[.product(s).fo
87a0 72 20 73 20 69 6e 20 73 75 62 73 65 74 73 28 20 73 68 6f 72 74 6c 69 73 74 20 29 20 5d 00 20 20 r.s.in.subsets(.shortlist.).]...
87c0 20 20 20 20 20 20 20 20 20 20 23 20 74 68 65 20 73 68 6f 72 74 6c 69 73 74 20 65 6d 62 65 64 73 ..........#.the.shortlist.embeds
87e0 20 69 6e 20 51 5f 6d 2e 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 73 75 63 68 20 74 68 61 74 .in.Q_m..............#.such.that
8800 20 74 68 61 74 20 73 6f 6d 65 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 73 75 62 67 72 6f .that.some.element.in.the.subgro
8820 75 70 20 6f 66 20 47 20 67 65 6e 65 72 61 74 65 64 20 62 79 00 20 20 20 20 20 20 20 20 20 20 20 up.of.G.generated.by............
8840 20 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6c 69 6e 65 20 67 69 76 65 73 2c 20 77 69 74 .#.The.following.line.gives,.wit
8860 68 6f 75 74 20 72 65 70 65 74 69 74 69 6f 6e 73 2c 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 27 hout.repetitions,.the.list.of.m'
8880 73 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 00 20 20 20 20 s..................continue.....
88a0 20 20 20 20 20 20 20 20 69 66 20 64 4d 20 25 20 28 32 5e 6e 29 20 21 3d 20 30 3a 00 20 20 20 20 ........if.dM.%.(2^n).!=.0:.....
88c0 20 20 20 20 20 20 20 20 23 20 72 6f 6f 74 73 20 6f 66 20 75 6e 69 74 79 2e 00 20 20 20 20 20 20 ........#.roots.of.unity........
88e0 20 20 20 20 20 20 23 20 57 65 20 6f 6e 6c 79 20 63 61 72 65 20 6f 66 20 74 68 65 20 69 6e 74 65 ......#.We.only.care.of.the.inte
8900 72 73 65 63 74 69 6f 6e 20 77 69 74 68 20 51 5f 64 4d 20 69 66 20 69 74 20 63 6f 6e 74 61 69 6e rsection.with.Q_dM.if.it.contain
8920 73 20 74 68 65 20 32 5e 6e 00 20 20 20 20 20 20 20 20 66 6f 72 20 64 4d 20 69 6e 20 64 69 76 69 s.the.2^n.........for.dM.in.divi
8940 73 6f 72 73 28 20 4d 20 29 3a 00 00 20 20 20 20 20 20 20 20 61 75 78 20 3d 20 5b 5d 20 23 20 4e sors(.M.):..........aux.=.[].#.N
8960 65 78 74 20 6c 69 6e 65 20 6f 66 20 61 64 5f 66 61 69 6c 20 74 61 62 6c 65 00 00 20 20 20 20 20 ext.line.of.ad_fail.table.......
8980 20 20 20 23 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 6d 2e 00 20 20 20 20 20 20 20 20 23 20 ...#.containing.them..........#.
89a0 69 6d 70 72 6f 76 65 64 20 62 79 20 70 72 65 63 6f 6d 70 75 74 69 6e 67 20 73 75 62 67 72 6f 75 improved.by.precomputing.subgrou
89c0 70 73 20 6f 66 20 47 2f 47 5e 32 20 61 6e 64 20 74 68 65 20 63 79 63 6c 6f 74 6f 6d 69 63 20 66 ps.of.G/G^2.and.the.cyclotomic.f
89e0 69 65 6c 64 73 00 20 20 20 20 20 20 20 20 23 20 54 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20 63 ields.........#.This.algorithm.c
8a00 6f 75 6c 64 20 62 65 20 69 6e 65 66 66 69 63 69 65 6e 74 20 66 6f 72 20 67 72 6f 75 70 73 20 6f ould.be.inefficient.for.groups.o
8a20 66 20 62 69 67 20 72 61 6e 6b 2e 20 49 74 20 63 61 6e 20 62 65 00 20 20 20 20 20 20 20 20 23 20 f.big.rank..It.can.be.........#.
8a40 00 20 20 20 20 20 20 20 20 23 20 77 69 6c 6c 20 62 65 20 72 2c 20 75 70 20 74 6f 20 63 6f 6e 73 .........#.will.be.r,.up.to.cons
8a60 69 64 65 72 69 6e 67 20 73 6f 6d 65 20 73 70 65 63 69 61 6c 20 63 61 73 65 73 20 28 64 65 73 63 idering.some.special.cases.(desc
8a80 72 69 62 65 64 20 62 65 6c 6f 77 29 2e 00 20 20 20 20 20 20 20 20 23 20 74 68 61 74 20 6c 69 65 ribed.below)..........#.that.lie
8aa0 20 69 6e 20 51 5f 64 4d 2e 20 54 68 69 73 20 69 73 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 61 20 .in.Q_dM..This.is.going.to.be.a.
8ac0 70 6f 77 65 72 20 6f 66 20 32 2e 20 54 68 65 20 73 6f 75 67 68 74 20 64 65 67 72 65 65 00 20 20 power.of.2..The.sought.degree...
8ae0 20 20 20 20 20 20 23 20 6e 75 6d 62 65 72 20 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 ......#.number.r.of.elements.in.
8b00 74 68 65 20 73 75 62 67 72 6f 75 70 20 6f 66 20 47 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 the.subgroup.of.G.generated.by.t
8b20 68 65 20 73 68 6f 72 74 6c 69 73 74 00 20 20 20 20 20 20 20 20 23 20 51 28 5c 73 71 72 74 7b 32 he.shortlist.........#.Q(\sqrt{2
8b40 5e 6e 7d 7b 47 7d 29 20 77 69 74 68 20 51 5f 64 4d 20 6f 76 65 72 20 51 5f 7b 32 5e 6e 7d 2e 20 ^n}{G}).with.Q_dM.over.Q_{2^n}..
8b60 57 65 20 6e 65 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 00 20 20 20 20 20 20 20 20 23 We.need.to.compute.the.........#
8b80 20 46 6f 72 20 65 61 63 68 20 64 69 76 69 73 6f 72 20 64 4d 20 6f 66 20 4d 2c 20 63 6f 6d 70 75 .For.each.divisor.dM.of.M,.compu
8ba0 74 65 20 74 68 65 20 64 65 67 72 65 65 20 6f 66 20 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f te.the.degree.of.the.intersectio
8bc0 6e 20 6f 66 00 00 20 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 72 74 6c 69 73 74 2e 72 65 6d 6f n.of..............shortlist.remo
8be0 76 65 28 2d 31 29 00 20 20 20 20 20 20 20 20 69 66 20 6e 20 3e 20 31 20 61 6e 64 20 2d 31 20 69 ve(-1).........if.n.>.1.and.-1.i
8c00 6e 20 73 68 6f 72 74 6c 69 73 74 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 72 74 6c 69 n.shortlist:.............shortli
8c20 73 74 2e 61 70 70 65 6e 64 28 2d 31 29 00 20 20 20 20 20 20 20 20 69 66 20 6e 20 3d 3d 20 31 20 st.append(-1).........if.n.==.1.
8c40 61 6e 64 20 64 20 3e 3d 20 31 3a 00 20 20 20 20 20 20 20 20 23 20 72 65 6d 6f 76 65 20 69 74 20 and.d.>=.1:.........#.remove.it.
8c60 6c 61 74 65 72 2e 00 20 20 20 20 20 20 20 20 23 20 57 65 20 68 61 76 65 20 74 6f 20 61 64 64 20 later..........#.We.have.to.add.
8c80 2d 31 20 74 6f 20 74 68 65 20 73 68 6f 72 74 6c 69 73 74 20 28 73 65 65 20 65 78 61 6d 70 6c 65 -1.to.the.shortlist.(see.example
8ca0 20 5b 31 32 2c 33 36 5d 29 20 61 6e 64 00 00 20 20 20 20 20 20 20 20 20 20 20 20 4d 20 3d 20 6c .[12,36]).and..............M.=.l
8cc0 63 6d 28 20 4d 2c 20 32 5e 28 6e 2b 31 29 20 29 00 20 20 20 20 20 20 20 20 69 66 20 6e 20 3c 3d cm(.M,.2^(n+1).).........if.n.<=
8ce0 20 64 3a 00 20 20 20 20 20 20 20 20 23 20 6e 65 67 61 74 69 76 65 20 65 6c 65 6d 65 6e 74 20 68 .d:.........#.negative.element.h
8d00 61 73 20 65 6e 6f 75 67 68 20 64 69 76 69 73 69 62 69 6c 69 74 79 29 2e 00 20 20 20 20 20 20 20 as.enough.divisibility).........
8d20 20 23 20 48 65 72 65 20 77 65 20 61 63 63 6f 75 6e 74 20 66 6f 72 20 74 68 65 20 65 78 74 72 61 .#.Here.we.account.for.the.extra
8d40 20 32 5e 7b 6e 2b 31 7d 20 72 6f 6f 74 20 6f 66 20 75 6e 69 74 79 20 28 69 6e 20 63 61 73 65 20 .2^{n+1}.root.of.unity.(in.case.
8d60 74 68 65 00 20 20 20 20 20 20 20 20 20 20 20 20 00 20 20 20 20 20 20 20 20 4d 20 3d 20 6c 63 6d the......................M.=.lcm
8d80 28 4d 2c 32 5e 6e 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 4d 20 3d 20 6c 63 6d 28 20 4d 2c (M,2^n)..............M.=.lcm(.M,
8da0 20 63 79 63 5f 65 6d 62 65 64 28 62 29 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 72 .cyc_embed(b).).............shor
8dc0 74 6c 69 73 74 2e 61 70 70 65 6e 64 28 20 62 20 29 20 00 20 20 20 20 20 20 20 20 20 20 20 20 62 tlist.append(.b.)..............b
8de0 20 3d 20 61 62 73 28 42 5b 64 5d 5b 30 5d 29 5e 28 31 2f 32 5e 64 29 00 20 20 20 20 20 20 20 20 .=.abs(B[d][0])^(1/2^d).........
8e00 69 66 20 64 20 21 3d 20 2d 31 20 61 6e 64 20 6e 20 3d 3d 20 64 2b 32 3a 20 20 20 20 20 20 20 20 if.d.!=.-1.and.n.==.d+2:........
8e20 00 20 20 20 20 20 20 20 20 23 20 77 65 20 61 72 65 20 62 65 79 6f 6e 64 20 69 74 73 20 6c 65 76 .........#.we.are.beyond.its.lev
8e40 65 6c 2e 00 20 20 20 20 20 20 20 20 23 20 57 65 20 61 64 64 20 61 20 72 6f 6f 74 20 6f 66 20 61 el..........#.We.add.a.root.of.a
8e60 6e 20 65 76 65 6e 20 70 6f 77 65 72 20 6f 66 20 74 68 65 20 6e 65 67 61 74 69 76 65 20 67 65 6e n.even.power.of.the.negative.gen
8e80 65 72 61 74 6f 72 2c 20 61 73 20 73 6f 6f 6e 20 61 73 00 00 20 20 20 20 20 20 20 20 20 20 20 20 erator,.as.soon.as..............
8ea0 20 20 20 20 20 20 20 20 4d 20 3d 20 6c 63 6d 28 20 4d 2c 20 63 79 63 5f 65 6d 62 65 64 28 62 29 ........M.=.lcm(.M,.cyc_embed(b)
8ec0 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 6f 72 74 6c 69 73 74 .).....................shortlist
8ee0 2e 61 70 70 65 6e 64 28 20 62 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .append(.b.)....................
8f00 20 62 20 3d 20 67 5e 28 31 2f 28 32 5e 28 6e 2d 31 29 29 29 20 23 20 62 20 69 73 20 32 2d 69 6e .b.=.g^(1/(2^(n-1))).#.b.is.2-in
8f20 64 69 76 69 73 69 62 6c 65 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 3a 00 divisible.................else:.
8f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 20 3d 20 6c 63 6d 28 20 4d 2c 20 ....................M.=.lcm(.M,.
8f60 73 70 65 63 69 61 6c 5f 65 6d 62 65 64 28 20 73 70 65 63 69 61 6c 5f 65 6c 65 6d 65 6e 74 20 29 special_embed(.special_element.)
8f80 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 70 65 63 69 61 6c 5f 65 .).....................special_e
8fa0 6c 65 6d 65 6e 74 20 3d 20 28 20 6e 2b 31 2c 20 61 62 73 28 67 29 5e 28 31 2f 28 32 5e 28 6e 2d lement.=.(.n+1,.abs(g)^(1/(2^(n-
8fc0 31 29 29 29 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 57 65 20 1))).).....................#.We.
8fe0 73 74 6f 72 65 20 69 74 20 61 73 20 61 73 20 70 61 69 72 20 28 20 6e 2b 31 2c 20 62 20 29 2e 00 store.it.as.as.pair.(.n+1,.b.)..
9000 61 64 00 00 1b 00 00 00 13 02 00 00 00 10 00 00 77 00 00 00 00 00 00 00 b7 0f 00 00 8a 0f 00 00 ad..............w...............
9020 66 0f 00 00 36 0f 00 00 fb 0e 00 00 e0 0e 00 00 df 0e 00 00 be 0e 00 00 b5 0e 00 00 99 0e 00 00 f...6...........................
9040 98 0e 00 00 85 0e 00 00 84 0e 00 00 37 0e 00 00 23 0e 00 00 08 0e 00 00 f7 0d 00 00 e8 0d 00 00 ............7...#...............
9060 d6 0d 00 00 d5 0d 00 00 8d 0d 00 00 71 0d 00 00 56 0d 00 00 38 0d 00 00 16 0d 00 00 0c 0d 00 00 ............q...V...8...........
9080 e4 0c 00 00 e3 0c 00 00 95 0c 00 00 58 0c 00 00 3f 0c 00 00 21 0c 00 00 de 0b 00 00 94 0b 00 00 ............X...?...!...........
90a0 5b 0b 00 00 3c 0b 00 00 3b 0b 00 00 22 0b 00 00 0d 0b 00 00 0c 0b 00 00 fb 0a 00 00 cb 0a 00 00 [...<...;..."...................
90c0 ca 0a 00 00 bb 0a 00 00 ba 0a 00 00 6e 0a 00 00 33 0a 00 00 1e 0a 00 00 01 0a 00 00 e6 09 00 00 ............n...3...............
90e0 c8 09 00 00 a4 09 00 00 95 09 00 00 94 09 00 00 4e 09 00 00 37 09 00 00 29 09 00 00 18 09 00 00 ................N...7...).......
9100 00 09 00 00 d4 08 00 00 b8 08 00 00 8c 08 00 00 5a 08 00 00 59 08 00 00 43 08 00 00 3f 08 00 00 ................Z...Y...C...?...
9120 f0 07 00 00 d0 07 00 00 b8 07 00 00 9c 07 00 00 9b 07 00 00 8c 07 00 00 6b 07 00 00 66 07 00 00 ........................k...f...
9140 17 07 00 00 f8 06 00 00 d0 06 00 00 ae 06 00 00 ad 06 00 00 93 06 00 00 84 06 00 00 43 06 00 00 ............................C...
9160 29 06 00 00 28 06 00 00 19 06 00 00 05 06 00 00 e4 05 00 00 d3 05 00 00 a4 05 00 00 90 05 00 00 )...(...........................
9180 79 05 00 00 4e 05 00 00 1c 05 00 00 ea 04 00 00 ca 04 00 00 b4 04 00 00 82 04 00 00 5f 04 00 00 y...N......................._...
91a0 44 04 00 00 0e 04 00 00 e6 03 00 00 d5 03 00 00 d4 03 00 00 99 03 00 00 64 03 00 00 30 03 00 00 D.......................d...0...
91c0 2f 03 00 00 15 03 00 00 fb 02 00 00 ed 02 00 00 c4 02 00 00 b3 02 00 00 a4 02 00 00 93 02 00 00 /...............................
91e0 84 02 00 00 83 02 00 00 47 02 00 00 2f 02 00 00 13 02 00 00 12 02 00 00 00 00 00 00 00 00 00 00 ........G.../...................
9200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 20 20 20 20 20 20 20 69 66 20 6e 20 ...........................if.n.
9220 3e 20 6c 65 6e 28 74 61 62 6c 65 6c 29 3a 00 20 20 20 20 69 66 20 6d 20 3e 20 6c 65 6e 28 74 61 >.len(tablel):.....if.m.>.len(ta
9240 62 6c 65 6c 29 3a 00 20 20 20 20 23 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 65 20 22 64 75 61 blel):.....#.Basically,.the."dua
9260 6c 22 20 6f 66 20 77 68 61 74 20 77 65 20 64 6f 20 69 6e 20 6c 5f 61 64 69 63 5f 64 65 67 72 65 l".of.what.we.do.in.l_adic_degre
9280 65 2e 00 00 20 20 20 20 72 20 3d 20 6c 65 6e 28 42 29 00 20 20 20 20 20 20 20 20 72 65 74 75 72 e.......r.=.len(B).........retur
92a0 6e 20 31 00 20 20 20 20 69 66 20 6e 20 3d 3d 20 30 3a 00 20 20 20 20 20 20 20 20 72 65 74 75 72 n.1.....if.n.==.0:.........retur
92c0 6e 20 30 00 20 20 20 20 20 20 20 20 23 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20 63 68 6f 69 63 n.0.........#.inconsistent.choic
92e0 65 20 6f 66 20 4d 20 61 6e 64 20 4e 00 20 20 20 20 69 66 20 6d 20 3c 20 6e 3a 00 20 20 20 20 6e e.of.M.and.N.....if.m.<.n:.....n
9300 20 3d 20 76 61 6c 75 61 74 69 6f 6e 28 20 4e 2c 20 6c 20 29 00 20 20 20 20 6d 20 3d 20 76 61 6c .=.valuation(.N,.l.).....m.=.val
9320 75 61 74 69 6f 6e 28 20 4d 2c 20 6c 20 29 00 00 64 65 66 20 6c 5f 61 64 69 63 5f 66 61 69 6c 75 uation(.M,.l.)..def.l_adic_failu
9340 72 65 5f 66 72 6f 6d 5f 64 61 74 61 28 20 42 2c 20 6c 2c 20 74 61 62 6c 65 6c 2c 20 4d 2c 20 4e re_from_data(.B,.l,.tablel,.M,.N
9360 20 29 3a 00 23 20 74 61 62 6c 65 6c 20 6d 75 73 74 20 62 65 20 74 68 65 20 6f 75 74 70 75 74 20 .):.#.tablel.must.be.the.output.
9380 74 61 62 6c 65 20 6f 66 20 6c 5f 61 64 69 63 5f 66 61 69 6c 75 72 65 2e 00 23 20 52 65 74 75 72 table.of.l_adic_failure..#.Retur
93a0 6e 73 20 61 20 70 6f 77 65 72 20 6f 66 20 6c 20 74 68 61 74 20 69 73 20 74 68 65 20 6c 2d 61 64 ns.a.power.of.l.that.is.the.l-ad
93c0 69 63 20 66 61 69 6c 75 72 65 20 61 74 20 4d 2c 20 4e 2e 00 00 20 20 20 20 72 65 74 75 72 6e 20 ic.failure.at.M,.N.......return.
93e0 74 61 62 65 6c 00 20 20 20 20 20 20 20 20 74 61 62 65 6c 2e 61 70 70 65 6e 64 28 28 72 6f 77 2c tabel.........tabel.append((row,
9400 6d 61 78 5f 66 61 69 6c 75 72 65 29 29 00 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 5f 66 61 max_failure)).............max_fa
9420 69 6c 75 72 65 20 3d 20 6d 61 78 28 20 6d 61 78 5f 66 61 69 6c 75 72 65 2c 20 66 61 69 6c 75 72 ilure.=.max(.max_failure,.failur
9440 65 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 2e 61 70 70 65 6e 64 28 76 6c 29 00 20 e.).............row.append(vl)..
9460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 75 72 65 20 3d 20 72 2a 6e 20 2d 20 76 ...............failure.=.r*n.-.v
9480 6c 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6c 20 3d 20 63 6f 6d 70 75 l.....................vl.=.compu
94a0 74 65 5f 76 6c 28 20 70 2c 20 6e 2c 20 6d 2c 20 72 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 te_vl(.p,.n,.m,.r.).............
94c0 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ....else:.......................
94e0 20 20 76 6c 20 2b 3d 20 31 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 ..vl.+=.1.....................if
9500 20 61 64 6a 75 73 74 5f 73 69 67 6e 28 20 47 42 20 29 5b 31 5d 20 3e 3d 20 31 3a 00 20 20 20 20 .adjust_sign(.GB.)[1].>=.1:.....
9520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6c 20 3d 20 63 6f 6d 70 75 74 65 5f 76 6c 28 ................vl.=.compute_vl(
9540 20 70 2c 20 31 2c 20 32 2c 20 72 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .p,.1,.2,.r.).................if
9560 20 6c 3d 3d 32 20 61 6e 64 20 6e 3d 3d 31 20 61 6e 64 20 6d 3d 3d 31 3a 00 20 20 20 20 20 20 20 .l==2.and.n==1.and.m==1:........
9580 20 20 20 20 20 69 66 20 6d 20 3e 3d 20 6e 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 76 6c 20 3d .....if.m.>=.n:.............vl.=
95a0 20 2d 31 00 20 20 20 20 20 20 20 20 66 6f 72 20 6e 20 69 6e 20 72 61 6e 67 65 28 20 31 2c 20 6d .-1.........for.n.in.range(.1,.m
95c0 61 78 28 20 6d 2b 31 2c 20 6d 61 78 4e 20 29 20 29 3a 00 20 20 20 20 20 20 20 20 72 6f 77 20 3d ax(.m+1,.maxN.).):.........row.=
95e0 20 5b 5d 00 20 20 20 20 66 6f 72 20 6d 20 69 6e 20 72 61 6e 67 65 28 20 31 2c 20 6d 61 78 4d 2b .[].....for.m.in.range(.1,.maxM+
9600 31 20 29 3a 00 20 20 20 20 6d 61 78 5f 66 61 69 6c 75 72 65 20 3d 20 30 00 20 20 20 20 74 61 62 1.):.....max_failure.=.0.....tab
9620 65 6c 20 3d 20 5b 5d 00 00 20 20 20 20 6d 61 78 4e 20 3d 20 6d 61 78 28 20 31 2c 20 6d 61 78 4e el.=.[]......maxN.=.max(.1,.maxN
9640 20 29 00 20 20 20 20 20 20 20 20 6d 61 78 4d 20 3d 20 6d 61 78 28 20 32 2c 20 6d 61 78 4d 20 29 .).........maxM.=.max(.2,.maxM.)
9660 20 23 20 46 6f 72 20 63 6f 6d 70 75 74 69 6e 67 20 70 61 72 61 6d 65 74 65 72 73 20 6f 76 65 72 .#.For.computing.parameters.over
9680 20 51 34 00 20 20 20 20 69 66 20 6c 20 3d 3d 20 32 3a 00 20 20 20 20 6d 61 78 4d 20 3d 20 6d 61 .Q4.....if.l.==.2:.....maxM.=.ma
96a0 78 28 20 31 2c 20 6d 61 78 4d 20 29 00 00 20 20 20 20 6d 61 78 4e 20 3d 20 6d 61 78 28 20 6d 61 x(.1,.maxM.)......maxN.=.max(.ma
96c0 78 4d 2c 20 6c 65 6e 28 47 42 29 2d 31 20 29 00 20 20 20 20 6d 61 78 4d 20 3d 20 6d 61 78 28 20 xM,.len(GB)-1.).....maxM.=.max(.
96e0 5b 20 73 75 6d 28 78 29 20 66 6f 72 20 78 20 69 6e 20 70 20 5d 20 29 00 20 20 20 20 70 20 3d 20 [.sum(x).for.x.in.p.].).....p.=.
9700 70 61 72 61 6d 65 74 65 72 73 5f 51 34 28 20 47 42 2c 20 6c 20 29 00 20 20 20 20 23 20 43 6f 6d parameters_Q4(.GB,.l.).....#.Com
9720 70 75 74 65 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 76 65 72 20 51 34 2e 20 46 6f putes.the.parameters.over.Q4..Fo
9740 72 20 6c 20 6f 64 64 2c 20 74 68 65 79 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 6f 76 r.l.odd,.they.are.the.same.as.ov
9760 65 72 20 51 2e 00 20 20 20 20 00 20 20 20 20 47 42 20 3d 20 6d 61 6b 65 5f 67 6f 6f 64 5f 62 61 er.Q...........GB.=.make_good_ba
9780 73 69 73 28 20 42 2c 20 6c 20 29 00 20 20 20 20 72 20 3d 20 6c 65 6e 28 42 29 00 00 64 65 66 20 sis(.B,.l.).....r.=.len(B)..def.
97a0 6c 5f 61 64 69 63 5f 66 61 69 6c 75 72 65 28 20 42 2c 20 6c 20 29 3a 00 23 20 42 20 69 73 20 61 l_adic_failure(.B,.l.):.#.B.is.a
97c0 6e 79 20 62 61 73 69 73 20 66 6f 72 20 47 2e 00 23 20 61 62 6f 76 65 20 22 74 6f 74 61 6c 5f 6c ny.basis.for.G..#.above."total_l
97e0 5f 61 64 69 63 5f 66 61 69 6c 75 72 65 22 2e 00 23 20 43 6f 6d 70 75 74 65 73 20 74 68 65 20 6c _adic_failure"..#.Computes.the.l
9800 2d 61 64 69 63 20 66 61 69 6c 75 72 65 20 66 6f 72 20 61 20 73 70 65 63 69 66 69 63 20 6c 2e 20 -adic.failure.for.a.specific.l..
9820 52 65 74 75 72 6e 73 20 61 20 22 74 61 62 6c 65 22 20 61 73 20 64 65 73 63 72 69 62 65 64 00 20 Returns.a."table".as.described..
9840 20 20 00 20 20 20 20 72 65 74 75 72 6e 20 62 61 64 5f 70 72 69 6d 65 73 00 00 20 20 20 20 62 61 .......return.bad_primes......ba
9860 64 5f 70 72 69 6d 65 73 2e 73 6f 72 74 28 29 20 23 20 45 6e 73 75 72 65 73 20 32 20 69 73 20 61 d_primes.sort().#.Ensures.2.is.a
9880 6c 77 61 79 73 20 66 69 72 73 74 00 20 20 20 20 20 20 20 20 62 61 64 5f 70 72 69 6d 65 73 20 2b lways.first.........bad_primes.+
98a0 3d 20 5b 32 5d 20 23 20 32 20 69 73 20 61 6c 77 61 79 73 20 62 61 64 00 20 20 20 20 69 66 20 32 =.[2].#.2.is.always.bad.....if.2
98c0 20 6e 6f 74 20 69 6e 20 62 61 64 5f 70 72 69 6d 65 73 3a 00 20 20 20 20 62 61 64 5f 70 72 69 6d .not.in.bad_primes:.....bad_prim
98e0 65 73 20 3d 20 6c 69 73 74 28 20 70 72 69 6d 65 5f 66 61 63 74 6f 72 73 28 20 64 20 29 20 29 00 es.=.list(.prime_factors(.d.).).
9900 20 20 20 20 20 20 20 20 64 20 3d 20 67 63 64 28 20 64 2c 20 6d 20 29 00 20 20 20 20 66 6f 72 20 ........d.=.gcd(.d,.m.).....for.
9920 6d 20 69 6e 20 6d 73 3a 00 20 20 20 20 64 20 3d 20 6d 73 5b 30 5d 00 20 20 20 20 6d 73 20 3d 20 m.in.ms:.....d.=.ms[0].....ms.=.
9940 4d 2e 6d 69 6e 6f 72 73 28 20 61 20 29 00 20 20 20 20 23 20 43 6f 6d 70 75 74 65 20 77 68 69 63 M.minors(.a.).....#.Compute.whic
9960 68 20 70 72 69 6d 65 73 20 6c 20 64 69 76 69 64 65 20 61 6c 6c 20 6d 69 6e 6f 72 73 20 6f 66 20 h.primes.l.divide.all.minors.of.
9980 74 68 65 20 65 78 70 6f 6e 65 6e 74 20 6d 61 74 72 69 78 00 00 20 20 20 20 20 20 20 20 72 65 74 the.exponent.matrix..........ret
99a0 75 72 6e 00 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 22 54 68 69 73 20 69 73 20 6e 6f 74 20 61 urn.........print."This.is.not.a
99c0 20 62 61 73 69 73 22 00 20 20 20 20 69 66 20 61 20 3e 20 62 20 6f 72 20 4d 2e 72 61 6e 6b 28 29 .basis".....if.a.>.b.or.M.rank()
99e0 20 3c 20 61 3a 00 20 20 20 20 28 61 2c 62 29 20 3d 20 4d 2e 64 69 6d 65 6e 73 69 6f 6e 73 28 29 .<.a:.....(a,b).=.M.dimensions()
9a00 00 20 20 20 20 4d 20 3d 20 65 78 70 6f 6e 65 6e 74 5f 6d 61 74 72 69 78 28 20 42 20 29 00 64 65 .....M.=.exponent_matrix(.B.).de
9a20 66 20 62 61 64 5f 70 72 69 6d 65 73 28 20 42 20 29 3a 00 23 20 6d 61 78 69 6d 61 6c 2e 20 55 73 f.bad_primes(.B.):.#.maximal..Us
9a40 65 64 20 62 79 20 6c 5f 61 64 69 63 5f 64 65 67 72 65 65 20 61 6e 64 20 74 6f 74 61 6c 5f 6c 5f ed.by.l_adic_degree.and.total_l_
9a60 61 64 69 63 5f 66 61 69 6c 75 72 65 2e 00 23 20 43 6f 6d 70 75 74 65 73 20 74 68 65 20 22 62 61 adic_failure..#.Computes.the."ba
9a80 64 20 70 72 69 6d 65 73 22 2c 20 69 2e 65 2e 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 20 77 68 69 d.primes",.i.e..the.ones.for.whi
9aa0 63 68 20 74 68 65 20 6c 2d 61 64 69 63 20 70 61 72 74 20 69 73 20 6e 6f 74 00 00 20 20 20 20 72 ch.the.l-adic.part.is.not......r
9ac0 65 74 75 72 6e 20 72 65 74 00 00 20 20 20 20 20 20 20 20 72 65 74 5b 31 5d 2e 61 70 70 65 6e 64 eturn.ret..........ret[1].append
9ae0 28 20 6c 5f 61 64 69 63 5f 66 61 69 6c 75 72 65 28 20 42 2c 20 6c 20 29 20 29 00 20 20 20 20 66 (.l_adic_failure(.B,.l.).).....f
9b00 6f 72 20 6c 20 69 6e 20 62 70 3a 00 00 20 20 20 20 72 65 74 20 3d 20 28 20 62 70 2c 20 5b 5d 20 or.l.in.bp:......ret.=.(.bp,.[].
9b20 29 00 20 20 20 20 62 70 20 3d 20 62 61 64 5f 70 72 69 6d 65 73 28 20 42 20 29 00 00 64 65 66 20 ).....bp.=.bad_primes(.B.)..def.
9b40 74 6f 74 61 6c 5f 6c 5f 61 64 69 63 5f 66 61 69 6c 75 72 65 28 20 42 20 29 3a 00 23 20 20 20 20 total_l_adic_failure(.B.):.#....
9b60 20 64 65 67 72 65 65 20 6f 66 20 51 5f 7b 6c 5e 6d 2c 6c 5e 6e 7d 20 6f 76 65 72 20 51 5f 7b 6c .degree.of.Q_{l^m,l^n}.over.Q_{l
9b80 5e 6d 7d 2c 20 77 68 65 72 65 20 6c 20 3d 20 4c 5b 69 5d 00 23 20 20 20 2d 20 54 20 69 73 20 61 ^m},.where.l.=.L[i].#...-.T.is.a
9ba0 6e 20 61 72 72 61 79 20 6f 66 20 74 61 62 6c 65 73 2c 20 77 68 65 72 65 20 54 5b 69 5d 5b 6d 5d n.array.of.tables,.where.T[i][m]
9bc0 5b 6e 5d 20 69 73 20 74 68 65 20 6c 2d 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 00 23 20 [n].is.the.l-valuation.of.the.#.
9be0 20 20 2d 20 4c 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 70 72 69 6d 65 73 20 6c 20 74 68 61 74 ..-.L.is.a.list.of.primes.l.that
9c00 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 6d 61 78 69 6d 61 6c 20 6c 2d 61 64 69 63 20 70 61 72 74 .do.not.have.maximal.l-adic.part
9c20 00 23 20 52 65 74 75 72 6e 73 20 61 20 70 61 69 72 20 28 4c 2c 54 29 20 77 68 65 72 65 3a 00 23 .#.Returns.a.pair.(L,T).where:.#
9c40 20 49 6e 70 75 74 3a 20 61 6e 79 20 62 61 73 69 73 20 66 6f 72 20 47 00 23 20 6f 66 20 51 5f 7b .Input:.any.basis.for.G.#.of.Q_{
9c60 6c 5e 6d 7d 28 5c 73 71 72 74 5b 32 5e 6e 5d 28 47 29 29 20 6f 76 65 72 20 51 5f 7b 6c 5e 6d 7d l^m}(\sqrt[2^n](G)).over.Q_{l^m}
9c80 20 66 6f 72 20 61 6c 6c 20 70 6f 73 73 69 62 6c 65 20 6c 2e 00 23 20 43 6f 6d 70 75 74 65 73 20 .for.all.possible.l..#.Computes.
9ca0 74 68 65 20 22 6c 2d 61 64 69 63 20 66 61 69 6c 75 72 65 22 2c 20 69 2e 65 2e 20 74 68 65 20 72 the."l-adic.failure",.i.e..the.r
9cc0 61 74 69 6f 20 62 65 74 77 65 65 6e 20 6c 5e 7b 6e 72 7d 20 61 6e 64 20 74 68 65 20 64 65 67 72 atio.between.l^{nr}.and.the.degr
9ce0 65 65 00 00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 63 6d 28 20 32 5e 6e 2c 20 63 79 63 ee..........return.lcm(.2^n,.cyc
9d00 5f 65 6d 62 65 64 28 62 29 20 29 00 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 72 65 _embed(b).).....else:.........re
9d20 74 75 72 6e 20 34 20 2a 20 63 79 63 5f 65 6d 62 65 64 28 6d 2f 32 29 00 20 20 20 20 69 66 20 6e turn.4.*.cyc_embed(m/2).....if.n
9d40 20 3d 3d 20 33 20 61 6e 64 20 6d 20 25 20 32 20 3d 3d 20 30 3a 00 20 20 20 20 6d 20 3d 20 73 71 .==.3.and.m.%.2.==.0:.....m.=.sq
9d60 75 61 72 65 66 72 65 65 5f 70 61 72 74 28 62 29 00 64 65 66 20 73 70 65 63 69 61 6c 5f 65 6d 62 uarefree_part(b).def.special_emb
9d80 65 64 28 20 28 6e 2c 62 29 20 29 3a 00 23 20 43 6f 6d 70 75 74 65 73 20 74 68 65 20 6d 69 6e 69 ed(.(n,b).):.#.Computes.the.mini
9da0 6d 61 6c 20 63 79 63 6c 6f 74 6f 6d 69 63 20 66 69 65 6c 64 20 63 6f 6e 74 61 69 6e 69 6e 67 20 mal.cyclotomic.field.containing.
9dc0 5c 7a 65 74 61 5f 7b 32 5e 6e 7d 5c 73 71 72 74 28 62 29 2e 00 00 20 20 20 20 72 65 74 75 72 6e \zeta_{2^n}\sqrt(b).......return
9de0 20 61 62 73 28 6d 29 00 20 20 20 20 20 20 20 20 6d 20 2a 3d 20 34 00 20 20 20 20 69 66 20 6d 25 .abs(m).........m.*=.4.....if.m%
9e00 34 20 21 3d 20 31 3a 00 20 20 20 20 6d 20 3d 20 73 71 75 61 72 65 66 72 65 65 5f 70 61 72 74 28 4.!=.1:.....m.=.squarefree_part(
9e20 62 29 00 64 65 66 20 63 79 63 5f 65 6d 62 65 64 28 20 62 20 29 3a 00 23 20 52 65 74 75 72 6e 73 b).def.cyc_embed(.b.):.#.Returns
9e40 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 6d 20 73 75 63 68 20 74 68 61 74 20 5c 73 71 72 74 28 .the.smallest.m.such.that.\sqrt(
9e60 62 29 20 69 73 20 69 6e 20 74 68 65 20 6d 2d 74 68 20 63 79 63 6c 6f 74 6f 6d 69 63 20 66 69 65 b).is.in.the.m-th.cyclotomic.fie
9e80 6c 64 2e 00 00 20 20 20 20 72 65 74 75 72 6e 20 61 64 5f 66 61 69 6c 00 00 20 20 20 20 20 20 20 ld.......return.ad_fail.........
9ea0 20 61 64 5f 66 61 69 6c 2e 61 70 70 65 6e 64 28 61 75 78 29 00 20 20 20 20 20 20 20 20 00 20 20 .ad_fail.append(aux)............
9ec0 20 20 20 20 20 20 20 20 20 20 61 75 78 2e 61 70 70 65 6e 64 28 20 28 64 4d 2c 72 29 20 29 00 00 ..........aux.append(.(dM,r).)..
9ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 20 2a 3d 20 32 00 20 20 20 20 20 ....................r.*=.2......
9f00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 6e 74 65 72 73 65 63 74 69 6e 67 5f 51 64 4d 20 61 ...........if.intersecting_QdM.a
9f20 6e 64 20 6e 6f 74 20 6e 6f 74 68 69 6e 67 5f 74 6f 5f 64 6f 3a 00 20 20 20 20 20 20 20 20 20 20 nd.not.nothing_to_do:...........
9f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 65 72 73 65 63 74 69 6e 67 5f 51 64 4d 20 3d ..............intersecting_QdM.=
9f60 20 54 72 75 65 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 64 4d 20 .True.....................if.dM.
9f80 25 20 6d 20 3d 3d 20 30 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 %.m.==.0:.......................
9fa0 20 20 6e 6f 74 68 69 6e 67 5f 74 6f 5f 64 6f 20 3d 20 54 72 75 65 00 20 20 20 20 20 20 20 20 20 ..nothing_to_do.=.True..........
9fc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 6e 20 3d 3d 20 32 20 61 6e 64 20 6d 20 3d 3d 20 34 3a ...........if.n.==.2.and.m.==.4:
9fe0 20 23 20 5c 7a 65 74 61 5f 38 20 74 69 6d 65 73 20 32 20 74 69 6d 65 73 20 73 71 75 61 72 65 00 .#.\zeta_8.times.2.times.square.
a000 61 64 00 00 58 05 00 00 80 06 00 00 00 10 00 00 43 00 00 00 00 00 00 00 dd 0f 00 00 cf 0f 00 00 ad..X...........C...............
a020 a1 0f 00 00 9c 0f 00 00 75 0f 00 00 74 0f 00 00 24 0f 00 00 06 0f 00 00 eb 0e 00 00 de 0e 00 00 ........u...t...$...............
a040 bd 0e 00 00 a5 0e 00 00 85 0e 00 00 76 0e 00 00 75 0e 00 00 28 0e 00 00 f7 0d 00 00 ac 0d 00 00 ............v...u...(...........
a060 84 0d 00 00 68 0d 00 00 59 0d 00 00 34 0d 00 00 2a 0d 00 00 ef 0c 00 00 e0 0c 00 00 cb 0c 00 00 ....h...Y...4...*...............
a080 b8 0c 00 00 b3 0c 00 00 92 0c 00 00 91 0c 00 00 41 0c 00 00 f7 0b 00 00 a7 0b 00 00 a6 0b 00 00 ................A...............
a0a0 5d 0b 00 00 1c 0b 00 00 1b 0b 00 00 f5 0a 00 00 da 0a 00 00 8c 0a 00 00 56 0a 00 00 45 0a 00 00 ].......................V...E...
a0c0 fc 09 00 00 b5 09 00 00 b4 09 00 00 65 09 00 00 1a 09 00 00 01 09 00 00 e4 08 00 00 c7 08 00 00 ............e...................
a0e0 9f 08 00 00 52 08 00 00 18 08 00 00 ec 07 00 00 c8 07 00 00 a2 07 00 00 86 07 00 00 66 07 00 00 ....R.......................f...
a100 48 07 00 00 2d 07 00 00 01 07 00 00 00 07 00 00 e5 06 00 00 e4 06 00 00 bf 06 00 00 be 06 00 00 H...-...........................
a120 80 06 00 00 7f 06 00 00 7e 06 00 00 79 06 00 00 8f 05 00 00 66 05 00 00 38 05 00 00 15 05 00 00 ........~...y.......f...8.......
a140 fe 04 00 00 d5 04 00 00 b9 04 00 00 9b 04 00 00 81 04 00 00 80 04 00 00 32 04 00 00 e4 03 00 00 ........................2.......
a160 b2 03 00 00 99 03 00 00 98 03 00 00 82 03 00 00 6c 03 00 00 48 03 00 00 15 03 00 00 f5 02 00 00 ................l...H...........
a180 d8 02 00 00 d7 02 00 00 87 02 00 00 86 02 00 00 6a 02 00 00 46 02 00 00 06 02 00 00 fd 01 00 00 ................j...F...........
a1a0 db 01 00 00 da 01 00 00 b0 01 00 00 db 01 00 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 43 6f ............................#.Co
a1c0 6d 70 75 74 65 20 6e 65 77 20 42 2c 20 64 20 61 6e 64 20 73 6f 20 6f 6e 2e 00 00 20 20 20 20 20 mpute.new.B,.d.and.so.on........
a1e0 20 20 20 20 20 20 20 62 5b 6d 61 78 69 5d 20 3d 20 6e 65 77 5f 65 6c 65 6d 65 6e 74 00 20 20 20 .......b[maxi].=.new_element....
a200 20 20 20 20 20 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 5f 65 6c 65 6d 65 6e ......................new_elemen
a220 74 20 2a 3d 20 62 5b 69 5d 5e 28 20 78 5b 69 5d 20 2a 20 6c 5e 28 64 5b 6d 61 78 69 5d 2d 64 5b t.*=.b[i]^(.x[i].*.l^(d[maxi]-d[
a240 69 5d 29 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 i]).).............for.i.in.range
a260 28 6c 65 6e 28 64 29 29 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 5f 65 6c 65 6d 65 6e (len(d)):.............new_elemen
a280 74 20 3d 20 31 00 00 20 20 20 20 20 20 20 20 20 20 20 20 78 20 3d 20 5b 28 61 2f 63 6f 65 66 66 t.=.1..............x.=.[(a/coeff
a2a0 73 5b 6d 61 78 69 5d 29 2e 6c 69 66 74 28 29 20 66 6f 72 20 61 20 69 6e 20 63 6f 65 66 66 73 5d s[maxi]).lift().for.a.in.coeffs]
a2c0 20 23 20 4e 6f 77 20 61 20 76 65 63 74 6f 72 20 6f 66 20 69 6e 74 00 00 20 20 20 20 20 20 20 20 .#.Now.a.vector.of.int..........
a2e0 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 69 20 3d 20 69 00 20 20 20 20 20 20 20 20 20 20 20 ............maxi.=.i............
a300 20 20 20 20 20 20 20 20 20 6d 61 78 64 20 3d 20 64 5b 69 5d 00 20 20 20 20 20 20 20 20 20 20 20 .........maxd.=.d[i]............
a320 20 20 20 20 20 69 66 20 64 5b 69 5d 20 3e 20 6d 61 78 64 20 61 6e 64 20 63 6f 65 66 66 73 5b 69 .....if.d[i].>.maxd.and.coeffs[i
a340 5d 20 21 3d 20 30 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e ].!=.0:.............for.i.in.ran
a360 67 65 28 6c 65 6e 28 64 29 29 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 64 20 3d 20 2d ge(len(d)):.............maxd.=.-
a380 31 00 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 69 20 3d 20 2d 31 00 00 20 20 20 20 20 20 20 1.............maxi.=.-1.........
a3a0 20 69 66 20 63 6f 65 66 66 73 20 21 3d 20 5b 5d 3a 00 20 20 20 20 20 20 20 20 63 6f 65 66 66 73 .if.coeffs.!=.[]:.........coeffs
a3c0 20 3d 20 66 69 6e 64 5f 63 6f 6d 62 69 6e 61 74 69 6f 6e 28 20 6d 61 74 72 69 78 28 4d 29 2c 20 .=.find_combination(.matrix(M),.
a3e0 6c 20 29 00 20 20 20 20 20 20 20 20 23 20 6f 6e 63 65 29 20 74 6f 20 70 72 6f 64 75 63 65 20 61 l.).........#.once).to.produce.a
a400 20 6e 65 77 20 62 61 73 69 73 2e 20 54 68 65 20 6e 65 77 20 62 61 73 69 73 20 68 61 73 20 6d 61 .new.basis..The.new.basis.has.ma
a420 78 69 6d 61 6c 20 70 61 72 61 6d 65 74 65 72 73 2e 00 20 20 20 20 20 20 20 20 23 20 49 66 20 74 ximal.parameters..........#.If.t
a440 68 65 20 42 69 27 73 20 61 72 65 20 6e 6f 74 20 73 74 72 6f 6e 67 6c 79 20 69 6e 64 65 70 65 6e he.Bi's.are.not.strongly.indepen
a460 64 65 6e 74 2c 20 61 70 70 6c 79 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 28 6f 6e 6c 79 00 dent,.apply.the.algorithm.(only.
a480 00 20 20 20 20 20 20 20 20 20 20 20 20 4d 2e 61 70 70 65 6e 64 28 72 6f 77 29 00 20 20 20 20 20 .............M.append(row)......
a4a0 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 69 5d 20 3d 20 65 65 2d 31 00 20 20 20 20 20 20 20 ...........row[i].=.ee-1........
a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 65 20 2b 3d 20 31 00 20 20 20 20 20 20 20 20 20 20 20 .............ee.+=.1............
a4e0 20 20 20 20 20 77 68 69 6c 65 20 28 49 5e 65 65 29 2e 64 69 76 69 64 65 73 28 67 29 3a 00 20 20 .....while.(I^ee).divides(g):...
a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 65 20 3d 20 31 00 20 20 20 20 20 20 20 20 20 20 20 ..............ee.=.1............
a520 20 20 20 20 20 49 20 3d 20 69 64 65 61 6c 73 5f 6c 69 73 74 5b 69 5d 00 20 20 20 20 20 20 20 20 .....I.=.ideals_list[i].........
a540 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 69 64 65 61 6c 73 5f 6c 69 ....for.i.in.range(len(ideals_li
a560 73 74 29 29 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 3d 20 5b 30 5d 20 2a 20 6c 65 st)):.............row.=.[0].*.le
a580 6e 28 69 64 65 61 6c 73 5f 6c 69 73 74 29 00 20 20 20 20 20 20 20 20 66 6f 72 20 67 20 69 6e 20 n(ideals_list).........for.g.in.
a5a0 42 3a 00 20 20 20 20 20 20 20 20 23 20 4d 61 6b 65 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 20 6d B:.........#.Make.the.exponent.m
a5c0 61 74 72 69 78 20 4d 20 28 66 6f 72 20 6e 6f 77 20 61 73 20 61 20 6c 69 73 74 20 6f 66 20 72 6f atrix.M.(for.now.as.a.list.of.ro
a5e0 77 73 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 2e 61 70 70 65 6e 64 28 20 32 ws)..................h.append(.2
a600 20 29 20 00 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 20 20 .)..............else:...........
a620 20 20 20 20 20 20 68 2e 61 70 70 65 6e 64 28 20 31 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 ......h.append(.1.).............
a640 65 6c 69 66 20 75 20 3d 3d 20 2d 31 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 2e elif.u.==.-1:.................h.
a660 61 70 70 65 6e 64 28 20 30 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 69 23 23 23 23 23 23 23 append(.0.).............i#######
a680 23 20 55 73 65 73 20 54 68 65 6f 72 65 6d 20 31 38 20 74 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 #.Uses.Theorem.18.to.compute.the
a6a0 20 64 65 67 72 65 65 20 6f 66 20 4b 75 6d 6d 65 72 20 65 78 74 65 6e 73 69 6f 6e 73 2e 00 00 20 .degree.of.Kummer.extensions....
a6c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 61 72 61 6d 65 74 65 72 73 5f 51 28 20 67 62 2c 20 .......return.parameters_Q(.gb,.
a6e0 32 20 29 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 74 00 2.)..................return.ret.
a700 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 5b 69 6e 64 5f 6d 61 78 5d 20 3d 20 .................ret[ind_max].=.
a720 28 20 64 31 2b 31 2c 20 68 31 20 29 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 (.d1+1,.h1.)....................
a740 20 68 31 20 3d 20 32 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 69 66 20 64 31 20 .h1.=.2.................elif.d1.
a760 3d 3d 20 30 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 31 20 3d 20 31 ==.0:.....................h1.=.1
a780 20 2d 20 68 31 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 64 31 20 3d 3d 20 31 .-.h1.................if.d1.==.1
a7a0 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 31 2c 20 68 31 20 3d 20 72 65 74 5b 69 :.................d1,.h1.=.ret[i
a7c0 6e 64 5f 6d 61 78 5d 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 nd_max].........................
a7e0 69 6e 64 5f 6d 61 78 20 3d 20 69 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ind_max.=.i.....................
a800 20 20 20 20 64 69 76 5f 6d 61 78 20 3d 20 72 65 74 5b 69 5d 5b 30 5d 00 20 20 20 20 20 20 20 20 ....div_max.=.ret[i][0].........
a820 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 61 5b 69 5d 20 21 3d 20 30 20 61 6e 64 20 72 65 74 ............if.a[i].!=.0.and.ret
a840 5b 69 5d 5b 30 5d 20 3e 20 64 69 76 5f 6d 61 78 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 [i][0].>.div_max:...............
a860 20 20 20 20 20 20 72 65 74 2e 61 70 70 65 6e 64 28 20 28 64 69 76 69 73 69 62 69 6c 69 74 79 28 ......ret.append(.(divisibility(
a880 4d 5b 69 5d 2c 32 29 2c 20 31 2d 6d 61 78 28 30 2c 73 67 6e 28 62 5b 69 5d 29 29 29 20 29 00 20 M[i],2),.1-max(0,sgn(b[i]))).)..
a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 ...............for.i.in.range(le
a8c0 6e 28 62 29 29 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 5f 6d 61 78 20 3d n(b)):.................ind_max.=
a8e0 20 2d 31 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 76 5f 6d 61 78 20 3d 20 2d 31 .-1.................div_max.=.-1
a900 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 20 3d 20 5b 5d 00 20 20 20 20 20 20 .................ret.=.[].......
a920 20 20 20 20 20 20 20 20 20 20 23 20 6f 66 20 68 69 67 68 65 73 74 20 64 69 76 69 73 69 62 69 6c ..........#.of.highest.divisibil
a940 69 74 79 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e 20 74 68 65 20 63 6f 6d 62 69 6e 61 74 ity.that.appears.in.the.combinat
a960 69 6f 6e 2e 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 52 65 74 75 72 6e 20 74 68 ion..................#.Return.th
a980 65 20 70 61 72 61 6d 65 74 65 72 73 2c 20 63 68 61 6e 67 69 6e 67 20 6f 6e 6c 79 20 74 68 65 20 e.parameters,.changing.only.the.
a9a0 6f 6e 65 73 20 66 6f 20 74 68 65 20 65 6c 65 6d 65 6e 74 00 00 20 20 20 20 20 20 20 20 20 20 20 ones.fo.the.element.............
a9c0 20 20 20 20 20 63 20 3d 20 5b 20 62 5b 69 5d 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c .....c.=.[.b[i].for.i.in.range(l
a9e0 65 6e 28 61 5b 30 3a 2d 31 5d 29 29 20 69 66 20 61 5b 69 5d 20 21 3d 20 30 20 5d 00 20 20 20 20 en(a[0:-1])).if.a[i].!=.0.].....
aa00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 42 61 73 69 73 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 ............#.Basis.elements.tha
aa20 74 20 61 63 74 75 61 6c 6c 79 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6d 62 69 6e 61 t.actually.appear.in.the.combina
aa40 74 69 6f 6e 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 20 20 20 20 20 20 20 20 20 20 tion............................
aa60 20 20 20 20 20 20 23 20 6f 66 20 74 68 65 20 62 5f 69 27 73 20 6f 66 20 74 68 65 20 66 6f 72 6d ......#.of.the.b_i's.of.the.form
aa80 20 32 20 2a 20 73 71 75 61 72 65 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 74 68 .2.*.square.................#.th
aaa0 65 20 76 65 63 74 6f 72 20 61 5b 30 3a 2d 31 5d 20 67 69 76 65 73 20 74 68 65 20 63 6f 65 66 66 e.vector.a[0:-1].gives.the.coeff
aac0 69 63 69 65 6e 74 73 20 66 6f 72 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 00 20 20 20 20 20 20 icients.for.a.combination.......
aae0 20 20 20 20 20 20 69 66 20 61 5b 2d 31 5d 20 21 3d 20 30 3a 00 20 20 20 20 20 20 20 20 66 6f 72 ......if.a[-1].!=.0:.........for
ab00 20 61 20 69 6e 20 4d 4d 2e 6b 65 72 6e 65 6c 28 29 2e 62 61 73 69 73 28 29 3a 00 00 20 20 20 20 .a.in.MM.kernel().basis():......
ab20 20 20 20 20 4d 4d 20 3d 20 65 78 70 6f 6e 65 6e 74 5f 6d 61 74 72 69 78 28 20 62 62 20 2b 20 5b ....MM.=.exponent_matrix(.bb.+.[
ab40 32 5d 20 29 2e 63 68 61 6e 67 65 5f 72 69 6e 67 28 20 47 46 28 20 32 20 29 20 29 20 00 20 20 20 2].).change_ring(.GF(.2.).).....
ab60 20 20 20 20 20 23 20 43 6f 6d 70 75 74 69 6e 67 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f .....#.Computing.a.combination.o
ab80 66 20 62 62 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 32 20 2a 20 73 71 f.bb.elements.of.the.form.2.*.sq
aba0 75 61 72 65 2e 00 00 20 20 20 20 20 20 20 20 62 62 20 3d 20 5b 20 61 62 73 28 62 5b 69 5d 29 20 uare...........bb.=.[.abs(b[i]).
abc0 5e 20 28 32 5e 28 2d 64 69 76 69 73 69 62 69 6c 69 74 79 28 4d 5b 69 5d 2c 32 29 29 29 20 66 6f ^.(2^(-divisibility(M[i],2))).fo
abe0 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 62 29 29 20 5d 00 20 20 20 20 20 20 20 20 23 r.i.in.range(len(b)).].........#
ac00 20 67 5f 69 20 69 6e 20 74 68 65 20 61 72 74 69 63 6c 65 2c 20 77 68 69 6c 65 20 74 68 65 20 65 .g_i.in.the.article,.while.the.e
ac20 6c 65 6d 65 6e 74 73 20 6f 66 20 62 62 20 77 69 6c 6c 20 62 65 20 74 68 65 20 62 5f 69 27 73 2e lements.of.bb.will.be.the.b_i's.
ac40 00 20 20 20 20 20 20 20 20 23 20 54 68 61 6e 6b 73 20 74 6f 20 6d 79 20 74 65 72 72 69 62 6c 65 .........#.Thanks.to.my.terrible
ac60 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 62 20 61 72 65 .notation,.the.elements.of.b.are
ac80 20 77 68 61 74 20 61 72 65 20 63 61 6c 6c 65 64 00 00 20 20 20 20 20 20 20 20 4d 20 3d 20 65 78 .what.are.called..........M.=.ex
aca0 70 6f 6e 65 6e 74 5f 6d 61 74 72 69 78 28 20 62 20 29 00 20 20 20 20 00 20 20 20 20 20 20 20 20 ponent_matrix(.b.)..............
acc0 20 20 20 20 62 20 2b 3d 20 78 00 20 20 20 20 20 20 20 20 66 6f 72 20 78 20 69 6e 20 67 62 3a 00 ....b.+=.x.........for.x.in.gb:.
ace0 20 20 20 20 20 20 20 20 62 20 3d 20 5b 5d 00 20 20 20 20 20 20 20 20 23 20 43 6f 6e 76 65 72 74 ........b.=.[].........#.Convert
ad00 73 20 66 72 6f 6d 20 22 67 6f 6f 64 20 62 61 73 69 73 20 66 6f 72 6d 61 74 22 20 74 6f 20 73 69 s.from."good.basis.format".to.si
ad20 6d 70 6c 65 20 6c 69 73 74 00 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 72 65 74 75 mple.list.....else:.........retu
ad40 72 6e 20 70 61 72 61 6d 65 74 65 72 73 5f 51 28 20 67 62 2c 20 6c 20 29 00 20 20 20 20 69 66 20 rn.parameters_Q(.gb,.l.).....if.
ad60 6c 20 21 3d 20 32 3a 00 64 65 66 20 70 61 72 61 6d 65 74 65 72 73 5f 51 34 28 20 67 62 2c 20 6c l.!=.2:.def.parameters_Q4(.gb,.l
ad80 20 29 3a 00 23 20 49 66 20 6c 3d 32 2c 20 69 74 20 75 73 65 73 20 74 68 65 20 72 65 73 75 6c 74 .):.#.If.l=2,.it.uses.the.result
ada0 73 20 6f 66 20 50 53 54 2d 32 2e 00 23 20 49 66 20 6c 20 69 73 20 6f 64 64 20 69 74 20 6a 75 73 s.of.PST-2..#.If.l.is.odd.it.jus
adc0 74 20 75 73 65 73 20 74 68 65 20 67 6f 6f 64 20 62 61 73 69 73 20 67 69 76 65 6e 20 74 6f 20 63 t.uses.the.good.basis.given.to.c
ade0 6f 6d 70 75 74 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 2e 00 23 20 6f 76 65 72 20 51 20 ompute.the.parameters..#.over.Q.
ae00 66 6f 72 20 47 2e 20 52 65 74 75 72 6e 73 20 61 20 6c 69 73 74 20 6f 66 20 70 61 69 72 73 20 28 for.G..Returns.a.list.of.pairs.(
ae20 64 69 2c 68 69 29 2e 00 23 20 43 6f 6d 70 75 74 65 73 20 74 68 65 20 6c 2d 64 69 76 69 73 69 62 di,hi)..#.Computes.the.l-divisib
ae40 69 6c 69 74 79 20 70 61 72 61 6d 65 74 65 72 73 20 6f 66 20 47 20 6f 76 65 72 20 51 34 2c 20 67 ility.parameters.of.G.over.Q4,.g
ae60 69 76 65 6e 20 61 20 67 6f 6f 64 20 62 61 73 69 73 20 67 62 00 00 20 20 20 20 72 65 74 75 72 6e iven.a.good.basis.gb......return
ae80 20 72 65 74 00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 2e 61 70 70 65 6e 64 28 20 28 69 2c .ret.............ret.append(.(i,
aea0 30 29 20 29 00 20 20 20 20 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 67 62 5b 69 5d 3a 00 20 20 20 0).).........for.j.in.gb[i]:....
aec0 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 20 6c 65 6e 28 20 67 62 20 29 20 29 3a 00 20 20 .for.i.in.range(.len(.gb.).):...
aee0 20 20 72 65 74 20 3d 20 5b 5d 00 64 65 66 20 70 61 72 61 6d 65 74 65 72 73 5f 51 28 20 67 62 2c ..ret.=.[].def.parameters_Q(.gb,
af00 20 6c 20 29 3a 00 23 20 61 73 20 61 20 6c 69 73 74 20 6f 66 20 70 61 69 72 73 20 28 64 69 2c 68 .l.):.#.as.a.list.of.pairs.(di,h
af20 69 29 2e 00 23 20 52 65 74 75 72 6e 73 20 74 68 65 20 6c 2d 64 76 69 73 69 62 69 6c 69 74 79 20 i)..#.Returns.the.l-dvisibility.
af40 70 61 72 61 6d 65 74 65 72 73 20 6f 66 20 47 20 6f 76 65 72 20 51 2c 20 67 69 76 65 6e 20 61 20 parameters.of.G.over.Q,.given.a.
af60 67 6f 6f 64 20 62 61 73 69 73 20 67 62 20 6f 66 20 47 2c 00 00 20 20 20 20 72 65 74 75 72 6e 20 good.basis.gb.of.G,......return.
af80 6c 5e 28 72 2a 6e 2d 74 61 62 6c 65 6c 5b 6d 2d 31 5d 5b 30 5d 5b 6e 2d 31 5d 29 00 20 20 20 20 l^(r*n-tablel[m-1][0][n-1]).....
afa0 00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 5e 28 72 2a 6e 2d 74 61 62 6c 65 .............return.l^(r*n-table
afc0 6c 5b 2d 31 5d 5b 30 5d 5b 6e 2d 31 5d 29 00 20 20 20 20 20 20 20 20 65 6c 73 65 3a 00 20 20 20 l[-1][0][n-1]).........else:....
afe0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 5e 74 61 62 6c 65 6c 5b 2d 31 5d 5b 31 5d 00 .........return.l^tablel[-1][1].
b000 61 64 00 00 04 00 00 00 9c 01 00 00 00 10 00 00 5f 00 00 00 00 00 00 00 d9 0f 00 00 95 0f 00 00 ad.............._...............
b020 5b 0f 00 00 29 0f 00 00 0e 0f 00 00 0d 0f 00 00 d6 0e 00 00 ad 0e 00 00 92 0e 00 00 91 0e 00 00 [...)...........................
b040 7d 0e 00 00 3c 0e 00 00 3b 0e 00 00 00 0e 00 00 cd 0d 00 00 a0 0d 00 00 58 0d 00 00 23 0d 00 00 }...<...;...............X...#...
b060 f9 0c 00 00 cb 0c 00 00 a7 0c 00 00 83 0c 00 00 5f 0c 00 00 13 0c 00 00 e1 0b 00 00 9f 0b 00 00 ................_...............
b080 9e 0b 00 00 75 0b 00 00 4c 0b 00 00 32 0b 00 00 0c 0b 00 00 f0 0a 00 00 a3 0a 00 00 79 0a 00 00 ....u...L...2...............y...
b0a0 5a 0a 00 00 59 0a 00 00 16 0a 00 00 15 0a 00 00 06 0a 00 00 e5 09 00 00 a7 09 00 00 87 09 00 00 Z...Y...........................
b0c0 78 09 00 00 6e 09 00 00 5b 09 00 00 5a 09 00 00 0c 09 00 00 bf 08 00 00 9d 08 00 00 9c 08 00 00 x...n...[...Z...................
b0e0 4d 08 00 00 ff 07 00 00 c5 07 00 00 77 07 00 00 66 07 00 00 46 07 00 00 45 07 00 00 01 07 00 00 M...........w...f...F...E.......
b100 00 07 00 00 c5 06 00 00 a3 06 00 00 7d 06 00 00 59 06 00 00 2d 06 00 00 2c 06 00 00 1a 06 00 00 ............}...Y...-...,.......
b120 19 06 00 00 cc 05 00 00 87 05 00 00 37 05 00 00 18 05 00 00 f9 04 00 00 f8 04 00 00 b4 04 00 00 ............7...................
b140 af 04 00 00 74 04 00 00 2e 04 00 00 0c 04 00 00 e6 03 00 00 ca 03 00 00 ae 03 00 00 62 03 00 00 ....t.......................b...
b160 14 03 00 00 d1 02 00 00 a4 02 00 00 5c 02 00 00 33 02 00 00 2e 02 00 00 1c 02 00 00 1b 02 00 00 ............\...3...............
b180 fc 01 00 00 fb 01 00 00 b7 01 00 00 b2 01 00 00 9c 01 00 00 00 00 00 00 00 00 00 00 20 20 20 20 ................................
b1a0 70 72 69 6e 74 20 22 4d 5f 30 20 3d 22 2c 20 4d 30 00 20 20 20 20 00 20 20 20 20 28 20 28 20 72 print."M_0.=",.M0..........(.(.r
b1c0 2c 20 74 6f 72 73 69 6f 6e 20 29 2c 20 28 20 4d 30 2c 20 64 69 76 73 5f 4d 30 20 29 2c 20 28 20 ,.torsion.),.(.M0,.divs_M0.),.(.
b1e0 4e 30 2c 20 64 69 76 73 5f 4e 30 20 29 2c 20 46 54 20 29 20 3d 20 64 61 74 61 00 00 64 65 66 20 N0,.divs_N0.),.FT.).=.data..def.
b200 70 72 69 6e 74 5f 74 6f 74 61 6c 5f 74 61 62 6c 65 28 20 64 61 74 61 20 29 3a 00 00 20 20 20 20 print_total_table(.data.):......
b220 72 65 74 75 72 6e 20 6e 65 77 5f 46 54 00 20 20 20 20 00 20 20 20 20 20 20 20 20 20 20 20 20 6e return.new_FT..................n
b240 65 77 5f 46 54 5b 69 5d 5b 6a 5d 20 3d 20 65 78 70 5f 64 65 67 20 2f 20 64 65 67 00 20 20 20 20 ew_FT[i][j].=.exp_deg./.deg.....
b260 20 20 20 20 20 20 20 20 64 65 67 20 3d 20 6b 75 6d 6d 65 72 5f 64 65 67 72 65 65 5f 66 72 6f 6d ........deg.=.kummer_degree_from
b280 5f 74 6f 74 61 6c 5f 74 61 62 6c 65 28 20 32 2a 64 4d 2c 20 64 4e 2c 20 6e 65 77 5f 64 61 74 61 _total_table(.2*dM,.dN,.new_data
b2a0 20 29 20 00 20 20 20 20 20 20 20 20 20 20 20 20 65 78 70 5f 64 65 67 20 3d 20 65 75 6c 65 72 5f .)..............exp_deg.=.euler_
b2c0 70 68 69 28 32 2a 64 4d 29 20 2a 20 64 4e 5e 72 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 69 phi(2*dM).*.dN^r.............#.i
b2e0 74 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 20 69 6e 20 74 68 65 6f 72 79 20 74 6f 20 t.is.not.necessary.in.theory.to.
b300 63 6f 6d 70 75 74 65 20 74 68 65 20 64 65 67 72 65 65 2e 00 20 20 20 20 20 20 20 20 20 20 20 20 compute.the.degree..............
b320 23 20 74 6f 72 73 69 6f 6e 2d 66 72 65 65 20 63 61 73 65 2e 20 49 74 20 69 73 20 65 61 73 69 65 #.torsion-free.case..It.is.easie
b340 72 20 74 6f 20 77 72 69 74 65 20 69 74 20 6c 69 6b 65 20 74 68 69 73 2c 20 61 6c 74 68 6f 75 67 r.to.write.it.like.this,.althoug
b360 68 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6c 69 h.............#.The.following.li
b380 6e 65 73 20 6a 75 73 74 20 63 6f 70 79 20 74 68 65 20 66 61 69 6c 75 72 65 20 66 72 6f 6d 20 28 nes.just.copy.the.failure.from.(
b3a0 32 4d 2c 4e 29 20 69 6e 20 74 68 65 20 00 20 20 20 20 20 20 20 20 20 20 20 20 64 4d 20 3d 20 64 2M,N).in.the..............dM.=.d
b3c0 69 76 73 5f 4d 30 5b 6a 5d 00 20 20 20 20 20 20 20 20 20 20 20 20 64 4e 20 3d 20 64 69 76 73 5f ivs_M0[j].............dN.=.divs_
b3e0 4e 30 5b 69 5d 00 20 20 20 20 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e N0[i].........for.j.in.range(len
b400 28 64 69 76 73 5f 4d 30 29 29 3a 00 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c (divs_M0)):.....for.i.in.range(l
b420 65 6e 28 64 69 76 73 5f 4e 30 29 29 3a 00 20 20 20 20 6e 65 77 5f 64 61 74 61 20 3d 20 28 20 28 en(divs_N0)):.....new_data.=.(.(
b440 20 72 2c 20 46 61 6c 73 65 20 29 2c 20 28 20 4d 30 2c 20 64 69 76 73 5f 4d 30 20 29 2c 20 28 20 .r,.False.),.(.M0,.divs_M0.),.(.
b460 4e 30 2c 20 64 69 76 73 5f 4e 30 20 29 2c 20 46 54 20 29 00 20 20 20 20 6e 65 77 5f 46 54 20 3d N0,.divs_N0.),.FT.).....new_FT.=
b480 20 5b 20 5b 20 31 20 66 6f 72 20 64 31 20 69 6e 20 64 69 76 73 5f 4d 30 20 5d 20 66 6f 72 20 64 .[.[.1.for.d1.in.divs_M0.].for.d
b4a0 32 20 69 6e 20 64 69 76 73 5f 4e 30 20 5d 00 20 20 20 20 00 20 20 20 20 28 20 28 20 72 2c 20 74 2.in.divs_N0.]..........(.(.r,.t
b4c0 6f 72 73 69 6f 6e 20 29 2c 20 28 20 4d 30 2c 20 64 69 76 73 5f 4d 30 20 29 2c 20 28 20 4e 30 2c orsion.),.(.M0,.divs_M0.),.(.N0,
b4e0 20 64 69 76 73 5f 4e 30 20 29 2c 20 46 54 20 29 20 3d 20 64 61 74 61 00 00 64 65 66 20 74 6f 72 .divs_N0.),.FT.).=.data..def.tor
b500 73 69 6f 6e 5f 74 61 62 6c 65 5f 6f 64 64 28 20 64 61 74 61 20 29 3a 00 23 20 4e 20 69 73 20 65 sion_table_odd(.data.):.#.N.is.e
b520 76 65 6e 20 61 6e 64 20 65 3d 30 20 6f 74 68 65 72 77 69 73 65 2e 00 23 20 49 6e 20 6f 74 68 65 ven.and.e=0.otherwise..#.In.othe
b540 72 20 77 6f 72 64 73 2c 20 74 68 65 20 65 78 70 65 63 74 65 64 20 64 65 67 72 65 65 20 28 6f 76 r.words,.the.expected.degree.(ov
b560 65 72 20 51 29 20 32 5e 65 20 2a 20 70 68 69 28 4d 29 20 2a 20 4e 5e 72 2c 20 77 68 65 72 65 20 er.Q).2^e.*.phi(M).*.N^r,.where.
b580 65 3d 31 20 69 66 00 23 20 74 68 65 20 65 6e 74 72 79 20 61 74 20 28 4d 2c 4e 29 20 69 73 20 74 e=1.if.#.the.entry.at.(M,N).is.t
b5a0 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 74 6f 72 73 69 6f 6e 2d 66 72 65 65 20 65 6e 74 72 79 aken.from.the.torsion-free.entry
b5c0 20 61 74 20 28 32 4d 2c 4e 29 2e 00 23 20 4d 61 6b 65 73 20 74 68 65 20 66 61 69 6c 75 72 65 20 .at.(2M,N)..#.Makes.the.failure.
b5e0 74 61 62 6c 65 20 66 6f 72 20 74 68 65 20 74 6f 72 73 69 6f 6e 20 63 61 73 65 20 77 68 65 6e 20 table.for.the.torsion.case.when.
b600 4d 2f 4e 20 69 73 20 6f 64 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 00 00 20 20 20 20 72 65 M/N.is.odd..In.this.case......re
b620 74 75 72 6e 20 6e 65 77 5f 46 54 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 turn.new_FT..................new
b640 5f 46 54 5b 69 5d 5b 6a 5d 20 3d 20 32 20 2a 20 46 54 5b 69 5d 5b 6a 5d 00 20 20 20 20 20 20 20 _FT[i][j].=.2.*.FT[i][j]........
b660 20 20 20 20 20 69 66 20 64 69 76 73 5f 4e 30 5b 69 5d 20 25 20 32 20 3d 3d 20 30 3a 00 20 20 20 .....if.divs_N0[i].%.2.==.0:....
b680 20 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 69 76 73 5f 4d 30 29 .....for.j.in.range(len(divs_M0)
b6a0 29 3a 00 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 69 76 73 5f 4e ):.....for.i.in.range(len(divs_N
b6c0 30 29 29 3a 00 20 20 20 20 6e 65 77 5f 46 54 20 3d 20 5b 20 5b 20 31 20 66 6f 72 20 64 31 20 69 0)):.....new_FT.=.[.[.1.for.d1.i
b6e0 6e 20 64 69 76 73 5f 4d 30 20 5d 20 66 6f 72 20 64 32 20 69 6e 20 64 69 76 73 5f 4e 30 20 5d 00 n.divs_M0.].for.d2.in.divs_N0.].
b700 00 20 20 20 20 28 20 28 20 72 2c 20 74 6f 72 73 69 6f 6e 20 29 2c 20 28 20 4d 30 2c 20 64 69 76 .....(.(.r,.torsion.),.(.M0,.div
b720 73 5f 4d 30 20 29 2c 20 28 20 4e 30 2c 20 64 69 76 73 5f 4e 30 20 29 2c 20 46 54 20 29 20 3d 20 s_M0.),.(.N0,.divs_N0.),.FT.).=.
b740 64 61 74 61 00 00 64 65 66 20 74 6f 72 73 69 6f 6e 5f 74 61 62 6c 65 5f 65 76 65 6e 28 20 64 61 data..def.torsion_table_even(.da
b760 74 61 20 29 3a 00 23 20 65 3d 30 20 6f 74 68 65 72 77 69 73 65 2e 00 23 20 54 68 65 20 65 78 70 ta.):.#.e=0.otherwise..#.The.exp
b780 65 63 74 65 64 20 64 65 67 72 65 65 20 28 6f 76 65 72 20 51 29 20 32 5e 65 20 2a 20 70 68 69 28 ected.degree.(over.Q).2^e.*.phi(
b7a0 4d 29 20 2a 20 4e 5e 72 2c 20 77 68 65 72 65 20 65 3d 31 20 69 66 20 4e 20 69 73 20 65 76 65 6e M).*.N^r,.where.e=1.if.N.is.even
b7c0 20 61 6e 64 00 23 20 6f 66 20 67 63 64 28 4e 2c 4e 30 29 20 29 20 69 73 20 65 76 65 6e 2c 20 61 .and.#.of.gcd(N,N0).).is.even,.a
b7e0 6e 64 20 69 73 20 6b 65 70 74 20 74 68 65 20 73 61 6d 65 20 6f 74 68 65 72 77 69 73 65 2e 00 23 nd.is.kept.the.same.otherwise..#
b800 20 61 6e 20 65 6e 74 72 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 64 6f 75 62 6c 65 .an.entry.of.the.table.is.double
b820 64 20 69 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 76 61 6c 75 65 20 6f 66 20 d.if.the.corresponding.value.of.
b840 4e 20 28 61 63 74 75 61 6c 6c 79 2c 00 23 20 4d 61 6b 65 73 20 74 68 65 20 66 61 69 6c 75 72 65 N.(actually,.#.Makes.the.failure
b860 20 74 61 62 6c 65 20 66 6f 72 20 74 68 65 20 74 6f 72 73 69 6f 6e 20 63 61 73 65 20 77 68 65 6e .table.for.the.torsion.case.when
b880 20 4d 2f 4e 20 69 73 20 65 76 65 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 00 00 23 20 69 .M/N.is.even..In.this.case,..#.i
b8a0 66 20 4e 20 69 73 20 65 76 65 6e 20 61 6e 64 20 65 3d 30 20 6f 74 68 65 72 77 69 73 65 2e 00 23 f.N.is.even.and.e=0.otherwise..#
b8c0 20 61 73 20 74 68 65 20 72 61 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 32 5e 65 4e 5e 72 20 61 6e .as.the.ration.between.2^eN^r.an
b8e0 64 20 74 68 65 20 64 65 67 72 65 65 20 6f 66 20 51 5f 7b 4d 2c 4e 7d 20 6f 76 65 72 20 51 5f 4d d.the.degree.of.Q_{M,N}.over.Q_M
b900 2c 20 77 68 65 72 65 20 65 3d 31 00 23 20 46 6f 72 20 74 68 65 20 74 6f 72 73 69 6f 6e 20 74 61 ,.where.e=1.#.For.the.torsion.ta
b920 62 6c 65 73 2c 20 72 65 63 61 6c 6c 20 74 68 61 74 20 77 68 65 6e 20 2d 31 20 69 73 20 69 6e 20 bles,.recall.that.when.-1.is.in.
b940 47 2c 20 74 68 65 20 66 61 69 6c 75 72 65 20 69 73 20 64 65 66 69 6e 65 64 00 00 20 20 20 20 20 G,.the.failure.is.defined.......
b960 20 20 20 72 65 74 75 72 6e 20 72 65 74 00 20 20 20 20 65 6c 73 65 3a 00 20 20 20 20 20 20 20 20 ...return.ret.....else:.........
b980 72 65 74 75 72 6e 00 20 20 20 20 20 20 20 20 23 70 72 69 6e 74 5f 63 61 73 65 5f 6c 69 73 74 28 return.........#print_case_list(
b9a0 20 72 65 74 20 29 00 20 20 20 20 20 20 20 20 23 20 55 6e 63 6f 6d 6d 65 6e 74 20 66 6f 6c 6c 6f .ret.).........#.Uncomment.follo
b9c0 77 69 6e 67 20 6c 69 6e 65 20 66 6f 72 20 63 61 73 65 20 6c 69 73 74 20 64 65 73 63 72 69 70 74 wing.line.for.case.list.descript
b9e0 69 6f 6e 2e 00 20 20 20 20 20 20 20 20 70 72 69 6e 74 5f 74 6f 74 61 6c 5f 74 61 62 6c 65 28 20 ion..........print_total_table(.
ba00 72 65 74 20 29 00 20 20 20 20 69 66 20 6f 75 74 70 75 74 3a 00 00 20 20 20 20 72 65 74 20 3d 20 ret.).....if.output:......ret.=.
ba20 28 20 28 20 72 2c 20 74 6f 72 73 69 6f 6e 20 29 2c 20 28 20 4d 30 2c 20 64 69 76 73 5f 4d 30 20 (.(.r,.torsion.),.(.M0,.divs_M0.
ba40 29 2c 20 28 20 4e 30 2c 20 64 69 76 73 5f 4e 30 20 29 2c 20 46 54 20 29 00 00 20 20 20 20 20 20 ),.(.N0,.divs_N0.),.FT.)........
ba60 20 20 20 20 20 20 20 20 20 20 46 54 5b 6a 5d 5b 68 5d 20 2a 3d 20 66 6c 00 20 20 20 20 20 20 20 ..........FT[j][h].*=.fl........
ba80 20 20 20 20 20 66 6f 72 20 68 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 69 76 73 5f 4d 30 29 .....for.h.in.range(len(divs_M0)
baa0 29 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 66 6c 20 3d 20 6c 5f 61 64 69 63 5f 66 61 69 6c 75 ):.............fl.=.l_adic_failu
bac0 72 65 5f 66 72 6f 6d 5f 64 61 74 61 28 42 2c 6c 2c 6c 5f 61 64 69 63 5f 66 61 69 6c 75 72 65 5f re_from_data(B,l,l_adic_failure_
bae0 74 61 62 6c 65 5b 69 5d 2c 64 4e 2c 64 4e 29 00 20 20 20 20 20 20 20 20 20 20 20 20 64 4e 20 3d table[i],dN,dN).............dN.=
bb00 20 64 69 76 73 5f 4e 30 5b 6a 5d 00 20 20 20 20 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e .divs_N0[j].........for.j.in.ran
bb20 67 65 28 6c 65 6e 28 64 69 76 73 5f 4e 30 29 29 3a 00 20 20 20 20 20 20 20 20 6c 20 3d 20 62 61 ge(len(divs_N0)):.........l.=.ba
bb40 64 5f 70 72 69 6d 65 73 5b 69 5d 00 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 20 d_primes[i].....for.i.in.range(.
bb60 6c 65 6e 28 20 62 61 64 5f 70 72 69 6d 65 73 20 29 20 29 3a 00 20 20 20 20 23 20 41 64 64 69 6e len(.bad_primes.).):.....#.Addin
bb80 67 20 6c 2d 61 64 69 63 20 66 61 69 6c 75 72 65 20 74 6f 20 74 68 65 20 74 61 62 6c 65 00 00 20 g.l-adic.failure.to.the.table...
bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 ...............................F
bbc0 54 5b 6a 5d 5b 6c 5d 20 3d 20 6c 63 6d 28 20 46 54 5b 6a 5d 5b 6c 5d 2c 20 70 70 5b 31 5d 20 29 T[j][l].=.lcm(.FT[j][l],.pp[1].)
bbe0 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 .............................if.
bc00 64 4d 20 25 20 70 70 5b 30 5d 20 3d 3d 20 30 3a 20 20 00 20 20 20 20 20 20 20 20 20 20 20 20 20 dM.%.pp[0].==.0:................
bc20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 64 4e 25 28 32 5e 28 69 2b 31 29 29 21 3d 30 20 6f 72 ...........if.dN%(2^(i+1))!=0.or
bc40 20 69 3d 3d 6c 65 6e 28 61 64 65 6c 69 63 5f 66 61 69 6c 75 72 65 5f 74 61 62 6c 65 29 3a 00 20 .i==len(adelic_failure_table):..
bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 64 4e 25 28 32 5e 69 29 3d 3d ...................if.dN%(2^i)==
bc80 30 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 4e 20 3d 20 64 69 76 73 0:.....................dN.=.divs
bca0 5f 4e 30 5b 6a 5d 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 4d 20 3d 20 _N0[j].....................dM.=.
bcc0 64 69 76 73 5f 4d 30 5b 6c 5d 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 6a divs_M0[l].................for.j
bce0 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 69 76 73 5f 4e 30 29 29 3a 00 20 20 20 20 20 20 20 .in.range(len(divs_N0)):........
bd00 20 20 20 20 20 66 6f 72 20 6c 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 69 76 73 5f 4d 30 29 .....for.l.in.range(len(divs_M0)
bd20 29 3a 00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 66 61 69 6c 75 72 65 20 28 74 68 65 20 74 61 ):.............#.failure.(the.ta
bd40 62 6c 65 20 69 73 20 6e 6f 74 20 22 63 6f 6d 70 6c 65 74 65 22 29 2e 00 20 20 20 20 20 20 20 20 ble.is.not."complete")..........
bd60 20 20 20 20 23 20 52 75 6e 73 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 69 76 69 73 6f 72 73 20 ....#.Runs.through.all.divisors.
bd80 6f 66 20 4d 30 20 61 6e 64 20 4e 30 20 74 68 61 74 20 6d 61 79 20 68 61 76 65 20 74 68 69 73 00 of.M0.and.N0.that.may.have.this.
bda0 20 20 20 20 20 20 20 20 66 6f 72 20 70 70 20 69 6e 20 61 64 65 6c 69 63 5f 66 61 69 6c 75 72 65 ........for.pp.in.adelic_failure
bdc0 5f 74 61 62 6c 65 5b 69 2d 31 5d 3a 00 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 _table[i-1]:.....for.i.in.range(
bde0 31 2c 6c 65 6e 28 61 64 65 6c 69 63 5f 66 61 69 6c 75 72 65 5f 74 61 62 6c 65 29 2b 31 29 3a 00 1,len(adelic_failure_table)+1):.
be00 20 20 20 20 23 20 54 61 6b 65 73 20 74 68 65 20 61 64 65 6c 69 63 20 66 61 69 6c 75 72 65 20 66 ....#.Takes.the.adelic.failure.f
be20 72 6f 6d 20 74 68 65 20 74 68 65 20 72 65 6c 61 74 69 76 65 20 74 61 62 6c 65 00 00 20 20 20 20 rom.the.the.relative.table......
be40 46 54 20 3d 20 5b 20 5b 20 31 20 66 6f 72 20 64 31 20 69 6e 20 64 69 76 69 73 6f 72 73 28 4d 30 FT.=.[.[.1.for.d1.in.divisors(M0
be60 29 20 5d 20 66 6f 72 20 64 32 20 69 6e 20 64 69 76 69 73 6f 72 73 28 4e 30 29 20 5d 00 20 20 20 ).].for.d2.in.divisors(N0).]....
be80 20 23 20 46 61 69 6c 75 72 65 20 54 61 62 6c 65 00 00 20 20 20 20 64 69 76 73 5f 4d 30 20 3d 20 .#.Failure.Table......divs_M0.=.
bea0 64 69 76 69 73 6f 72 73 28 4d 30 29 00 20 20 20 20 4d 30 20 3d 20 61 64 65 6c 69 63 5f 66 61 69 divisors(M0).....M0.=.adelic_fai
bec0 6c 75 72 65 5f 74 61 62 6c 65 5b 2d 31 5d 5b 2d 31 5d 5b 30 5d 00 20 20 20 20 23 20 67 72 65 61 lure_table[-1][-1][0].....#.grea
bee0 74 65 73 74 20 4d 20 61 70 70 65 61 72 69 6e 67 20 69 6e 20 74 68 65 20 61 64 65 6c 69 63 20 66 test.M.appearing.in.the.adelic.f
bf00 61 69 6c 75 72 65 20 74 61 62 6c 65 00 00 20 20 20 20 64 69 76 73 5f 4e 30 20 3d 20 64 69 76 69 ailure.table......divs_N0.=.divi
bf20 73 6f 72 73 28 4e 30 29 00 20 20 20 20 4e 30 20 3d 20 6c 63 6d 28 20 4e 30 2c 20 32 5e 6c 65 6e sors(N0).....N0.=.lcm(.N0,.2^len
bf40 28 20 61 64 65 6c 69 63 5f 66 61 69 6c 75 72 65 5f 74 61 62 6c 65 20 29 20 29 00 20 20 20 20 23 (.adelic_failure_table.).).....#
bf60 20 45 78 74 72 61 20 66 61 63 74 6f 72 73 20 6f 66 20 32 20 6d 61 79 20 63 6f 6d 65 20 66 72 6f .Extra.factors.of.2.may.come.fro
bf80 6d 20 74 68 65 20 61 64 65 6c 69 63 20 66 61 69 6c 75 72 65 00 20 20 20 20 20 20 20 20 4e 30 20 m.the.adelic.failure.........N0.
bfa0 2a 3d 20 62 61 64 5f 70 72 69 6d 65 73 5b 69 5d 20 5e 20 6c 65 6e 28 20 6c 5f 61 64 69 63 5f 66 *=.bad_primes[i].^.len(.l_adic_f
bfc0 61 69 6c 75 72 65 5f 74 61 62 6c 65 5b 69 5d 5b 2d 31 5d 5b 30 5d 20 29 00 20 20 20 20 66 6f 72 ailure_table[i][-1][0].).....for
bfe0 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 20 62 61 64 5f 70 72 69 6d 65 73 20 29 29 3a 00 .i.in.range(len(.bad_primes.)):.
c000 61 64 00 00 be 08 00 00 96 09 00 00 00 10 00 00 2f 00 00 00 00 00 00 00 ce 0f 00 00 af 0f 00 00 ad............../...............
c020 80 0f 00 00 66 0f 00 00 42 0f 00 00 21 0f 00 00 d4 0e 00 00 90 0e 00 00 78 0e 00 00 59 0e 00 00 ....f...B...!...........x...Y...
c040 3e 0e 00 00 1f 0e 00 00 0c 0e 00 00 ec 0d 00 00 ea 0d 00 00 a8 0d 00 00 93 0d 00 00 69 0d 00 00 >...........................i...
c060 3a 0d 00 00 16 0d 00 00 fe 0c 00 00 d4 0c 00 00 b7 0c 00 00 98 0c 00 00 7d 0c 00 00 7b 0c 00 00 :.......................}...{...
c080 2c 0c 00 00 dd 0b 00 00 aa 0b 00 00 90 0b 00 00 8e 0b 00 00 77 0b 00 00 60 0b 00 00 3b 0b 00 00 ,...................w...`...;...
c0a0 07 0b 00 00 e6 0a 00 00 c8 0a 00 00 c6 0a 00 00 75 0a 00 00 73 0a 00 00 56 0a 00 00 31 0a 00 00 ................u...s...V...1...
c0c0 f0 09 00 00 e6 09 00 00 c3 09 00 00 c1 09 00 00 96 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c0e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c1a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c1c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c1e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c2a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c2c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c2e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c3a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c3c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c3e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c4a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c4c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c4e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c5a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c5c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c5e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c6a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c6c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c6e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c7a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c7c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c7e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c8a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c8c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c8e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
c980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 23 20 20 20 20 20 20 20 20 20 ......................#.........
c9a0 20 20 20 23 20 43 6f 6d 70 75 74 65 20 6e 65 77 20 42 2c 20 64 20 61 6e 64 20 73 6f 20 6f 6e 2e ...#.Compute.new.B,.d.and.so.on.
c9c0 00 23 00 23 20 20 20 20 20 20 20 20 20 20 20 20 62 5b 6d 61 78 69 5d 20 3d 20 6e 65 77 5f 65 6c .#.#............b[maxi].=.new_el
c9e0 65 6d 65 6e 74 00 23 20 20 20 20 20 20 20 20 00 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ement.#.........#...............
ca00 20 6e 65 77 5f 65 6c 65 6d 65 6e 74 20 2a 3d 20 62 5b 69 5d 5e 28 20 78 5b 69 5d 20 2a 20 6c 5e .new_element.*=.b[i]^(.x[i].*.l^
ca20 28 64 5b 6d 61 78 69 5d 2d 64 5b 69 5d 29 20 29 00 23 20 20 20 20 20 20 20 20 20 20 20 20 66 6f (d[maxi]-d[i]).).#............fo
ca40 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 29 29 3a 00 23 20 20 20 20 20 20 20 20 20 r.i.in.range(len(d)):.#.........
ca60 20 20 20 6e 65 77 5f 65 6c 65 6d 65 6e 74 20 3d 20 31 00 23 00 23 20 20 20 20 20 20 20 20 20 20 ...new_element.=.1.#.#..........
ca80 20 20 78 20 3d 20 5b 28 61 2f 63 6f 65 66 66 73 5b 6d 61 78 69 5d 29 2e 6c 69 66 74 28 29 20 66 ..x.=.[(a/coeffs[maxi]).lift().f
caa0 6f 72 20 61 20 69 6e 20 63 6f 65 66 66 73 5d 20 23 20 4e 6f 77 20 61 20 76 65 63 74 6f 72 20 6f or.a.in.coeffs].#.Now.a.vector.o
cac0 66 20 69 6e 74 00 23 00 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 f.int.#.#....................max
cae0 69 20 3d 20 69 00 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 64 20 i.=.i.#....................maxd.
cb00 3d 20 64 5b 69 5d 00 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 64 5b 69 5d 20 =.d[i].#................if.d[i].
cb20 3e 20 6d 61 78 64 20 61 6e 64 20 63 6f 65 66 66 73 5b 69 5d 20 21 3d 20 30 3a 00 23 20 20 20 20 >.maxd.and.coeffs[i].!=.0:.#....
cb40 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 64 29 29 3a 00 ........for.i.in.range(len(d)):.
cb60 23 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 64 20 3d 20 2d 31 00 23 20 20 20 20 20 20 20 20 #............maxd.=.-1.#........
cb80 20 20 20 20 6d 61 78 69 20 3d 20 2d 31 00 23 00 23 20 20 20 20 20 20 20 20 69 66 20 63 6f 65 66 ....maxi.=.-1.#.#........if.coef
cba0 66 73 20 21 3d 20 5b 5d 3a 00 23 20 20 20 20 20 20 20 20 63 6f 65 66 66 73 20 3d 20 66 69 6e 64 fs.!=.[]:.#........coeffs.=.find
cbc0 5f 63 6f 6d 62 69 6e 61 74 69 6f 6e 28 20 6d 61 74 72 69 78 28 4d 29 2c 20 6c 20 29 00 23 20 20 _combination(.matrix(M),.l.).#..
cbe0 20 20 20 20 20 20 23 20 6f 6e 63 65 29 20 74 6f 20 70 72 6f 64 75 63 65 20 61 20 6e 65 77 20 62 ......#.once).to.produce.a.new.b
cc00 61 73 69 73 2e 20 54 68 65 20 6e 65 77 20 62 61 73 69 73 20 68 61 73 20 6d 61 78 69 6d 61 6c 20 asis..The.new.basis.has.maximal.
cc20 70 61 72 61 6d 65 74 65 72 73 2e 00 23 20 20 20 20 20 20 20 20 23 20 49 66 20 74 68 65 20 42 69 parameters..#........#.If.the.Bi
cc40 27 73 20 61 72 65 20 6e 6f 74 20 73 74 72 6f 6e 67 6c 79 20 69 6e 64 65 70 65 6e 64 65 6e 74 2c 's.are.not.strongly.independent,
cc60 20 61 70 70 6c 79 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 28 6f 6e 6c 79 00 23 00 23 20 20 .apply.the.algorithm.(only.#.#..
cc80 20 20 20 20 20 20 20 20 20 20 4d 2e 61 70 70 65 6e 64 28 72 6f 77 29 00 23 20 20 20 20 20 20 20 ..........M.append(row).#.......
cca0 20 20 20 20 20 20 20 20 20 72 6f 77 5b 69 5d 20 3d 20 65 65 2d 31 00 23 20 20 20 20 20 20 20 20 .........row[i].=.ee-1.#........
ccc0 20 20 20 20 20 20 20 20 20 20 20 20 65 65 20 2b 3d 20 31 00 23 20 20 20 20 20 20 20 20 20 20 20 ............ee.+=.1.#...........
cce0 20 20 20 20 20 77 68 69 6c 65 20 28 49 5e 65 65 29 2e 64 69 76 69 64 65 73 28 67 29 3a 00 23 20 .....while.(I^ee).divides(g):.#.
cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 65 20 3d 20 31 00 23 20 20 20 20 20 20 20 20 20 ...............ee.=.1.#.........
cd20 20 20 20 20 20 20 20 49 20 3d 20 69 64 65 61 6c 73 5f 6c 69 73 74 5b 69 5d 00 23 20 20 20 20 20 .......I.=.ideals_list[i].#.....
cd40 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 69 64 65 61 6c 73 .......for.i.in.range(len(ideals
cd60 5f 6c 69 73 74 29 29 3a 00 23 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 3d 20 5b 30 5d 20 _list)):.#............row.=.[0].
cd80 2a 20 6c 65 6e 28 69 64 65 61 6c 73 5f 6c 69 73 74 29 00 23 20 20 20 20 20 20 20 20 66 6f 72 20 *.len(ideals_list).#........for.
cda0 67 20 69 6e 20 42 3a 00 23 20 20 20 20 20 20 20 20 23 20 4d 61 6b 65 20 74 68 65 20 65 78 70 6f g.in.B:.#........#.Make.the.expo
cdc0 6e 65 6e 74 20 6d 61 74 72 69 78 20 4d 20 28 66 6f 72 20 6e 6f 77 20 61 73 20 61 20 6c 69 73 74 nent.matrix.M.(for.now.as.a.list
cde0 20 6f 66 20 72 6f 77 73 29 00 23 00 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 2e 61 .of.rows).#.#................h.a
ce00 70 70 65 6e 64 28 20 32 20 29 20 00 23 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 3a 00 23 ppend(.2.)..#............else:.#
ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 2e 61 70 70 65 6e 64 28 20 31 20 29 00 23 20 ................h.append(.1.).#.
ce40 20 20 20 20 20 20 20 20 20 20 20 65 6c 69 66 20 75 20 3d 3d 20 2d 31 3a 00 23 20 20 20 20 20 20 ...........elif.u.==.-1:.#......
ce60 20 20 20 20 20 20 20 20 20 20 68 2e 61 70 70 65 6e 64 28 20 30 20 29 00 23 20 20 20 20 20 20 20 ..........h.append(.0.).#.......
ce80 20 20 20 20 20 69 66 20 75 20 3d 3d 20 31 3a 00 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .....if.u.==.1:.#...............
cea0 20 70 72 69 6e 74 20 22 67 3a 22 2c 20 67 2c 20 22 2c 20 42 67 3a 22 2c 20 42 67 2c 20 22 2c 20 .print."g:",.g,.",.Bg:",.Bg,.",.
cec0 65 78 70 6f 6e 65 6e 74 3a 22 2c 20 6c 5e 64 5b 2d 31 5d 00 23 20 20 20 20 20 20 20 20 20 20 20 exponent:",.l^d[-1].#...........
cee0 20 20 20 20 20 70 72 69 6e 74 20 22 45 72 72 6f 72 3a 20 67 20 69 73 20 6e 6f 74 20 74 68 65 20 .....print."Error:.g.is.not.the.
cf00 72 69 67 68 74 20 70 6f 77 65 72 20 6f 66 20 74 68 65 20 63 6f 6d 70 75 74 65 64 20 42 67 2e 22 right.power.of.the.computed.Bg."
cf20 00 23 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 6e 6f 74 20 75 2e 69 73 5f 75 6e 69 74 28 29 .#............if.not.u.is_unit()
cf40 3a 00 23 20 20 20 20 20 20 20 20 20 20 20 20 75 20 3d 20 67 20 2f 20 28 42 67 5e 28 6c 5e 64 5b :.#............u.=.g./.(Bg^(l^d[
cf60 2d 31 5d 29 29 00 23 20 20 20 20 20 20 20 20 20 20 20 20 42 2e 61 70 70 65 6e 64 28 42 67 29 00 -1])).#............B.append(Bg).
cf80 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 67 20 2a 3d 20 61 20 5e 20 28 65 78 70 73 #................Bg.*=.a.^.(exps
cfa0 5b 6a 5d 2f 28 6c 5e 64 5b 2d 31 5d 29 29 00 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 [j]/(l^d[-1])).#................
cfc0 20 20 20 20 20 20 20 20 62 72 65 61 6b 00 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ........break.#.................
cfe0 20 20 20 20 20 20 20 61 20 3d 20 69 72 72 65 64 75 63 69 62 6c 65 73 5f 6c 69 73 74 5b 69 5d 00 .......a.=.irreducibles_list[i].

Generated with cgit - Back to sebastiano.tronto.net