Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

python で有限体Fpでの楕円曲線上の有理点の群構造を調べる

ここでは、有限体F_{5}
(p=5)
楕円曲線 y^{2} = x^{3} + x + 1
(a=0,b=1,c=1) の有理点をpythonで調べています。 有理点の数は9です。(無限遠点を含む)
無限遠点はOと出力しています。
加法公式を用いて、有理点{P1, P2, ... P8}を2倍,3倍,...,9倍した点も示しています。
この計算の途中で元の有理点に戻った場合、あとは繰り返しなので、そこで計算を止めています。

P1,P2,P5,P6,P7,P8は9倍したところで無限遠点になるので、位数9の点といいます。 ここで倍々していくと9つ全ての点を通ります。
これを巡回群であるといいます。

P3,P4は3倍したところで無限遠点になるので、位数3の点といいます。

この群は2つの巡回群Z/3ZとZ/9Zの直積と同型であるといいます。

%matplotlib inline 
import numpy as np
import matplotlib.pyplot as plt

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def desc(self):
        if self.x == -1 and self.y == -1:
            return "O"
        return "("+str(self.x)+","+str(self.y)+")"
    
    def is_equal(self, other):
        return self.x == other.x and self.y == other.y

    def is_equal_negative(self, other, prime):
        return self.x == other.x and - self.y == other.y - prime
        
    def iszero(self):
        return self.x == -1 and self.y == -1
    
    @staticmethod
    def zero():
        return Point(-1, -1)

class EC:
    def __init__(self, a, b, c, p):
        self.a = a
        self.b = b
        self.c = c
        self.p = p
        self.calc_order()
    
    def calc_order(self):
        self.points = []
        for x in range(self.p):
            for y in range(self.p):
                pt = Point(x,y)
                if self.oncurve(pt):
                    self.points.append(pt)
        self.points_count = len(self.points)
        self.order = len(self.points)+1

    def oncurve(self, pt):
        l = ((pt.y**2) % self.p)
        r = ((pt.x**3) + self.a*(pt.x**2) + self.b*pt.x + self.c) % self.p
        return l == r

    def d(self):
        return -4*(self.a**3)*self.c \
                + (self.a**2)*(self.b**2) \
                + 18*self.a*self.b*self.c \
                - 4*(self.b**3) \
                - 27 * (self.c**2)
    
    def inverse(self, a):
        assert self.p >= 2
        return a ** (self.p-2)
    
    def plus(self, p1, p2):
        x1 = p1.x
        y1 = p1.y
        x2 = p2.x
        y2 = p2.y
        if (p1.iszero()):
            return p2
        if (p2.iszero()):
            return p1
        
        if p1.is_equal_negative(p2, self.p):
            return Point.zero()
        
        elif p1.is_equal(p2):
            if (y1 == 0):
                return Point.zero()
            else:
                lm = (3 * (x1 **2) + 2 * self.a * x1 + self.b) * self.inverse(2 * y1)
                x3 = (lm ** 2) - self.a - x1 - x2
                y3 = - lm *(x3-x1) - y1
        else:
            lm = (y2-y1) * self.inverse(x2-x1)
            x3 = (lm ** 2) - self.a - x1 - x2
            y3 = -(lm*(x3-x1) + y1)

        q = Point(x3 , y3)
        q2 = Point(x3 % self.p, y3 % self.p)
        if not self.oncurve(q2):
            print("p1 {0} p2 {1} q {2} q2 {3}".format(p1.desc(), p2.desc(), q.desc(), q2.desc()))
            assert False
        return q2

    def mul(self, p, n):
        q = p
        for i in range(n-1):
            q = ec.plus(q, p)
        return q

ec = EC(0, 1, 1, 5)

print "F" + str(ec.p)
print "d:" + str(ec.d())
print "#EC:" + str(ec.order)
print ""

plotx = [p.x for p in ec.points]
ploty = [p.y for p in ec.points]
n = ["P"+str(i+1) for (i, p) in zip(range(len(ec.points)), ec.points)]

for i in range(ec.points_count):
    baseP = ec.points[i]
    print "P"+str(i+1)+":" + baseP.desc()
    for j in range(2, ec.order+1):
        p = ec.mul(baseP, j)
        print str(j)+"*P"+str(i+1)+":"+p.desc()
        if (p == baseP):
            print ""
            break
    print ""
    
fig, ax = plt.subplots()
ax.scatter(plotx, ploty)

for i, txt in enumerate(n):
    ax.annotate(txt, (plotx[i],ploty[i]))
    
F5
d:-31
#EC:9

P1:(0,1)
2*P1:(4,2)
3*P1:(2,1)
4*P1:(3,4)
5*P1:(3,1)
6*P1:(2,4)
7*P1:(4,3)
8*P1:(0,4)
9*P1:O

P2:(0,4)
2*P2:(4,3)
3*P2:(2,4)
4*P2:(3,1)
5*P2:(3,4)
6*P2:(2,1)
7*P2:(4,2)
8*P2:(0,1)
9*P2:O

P3:(2,1)
2*P3:(2,4)
3*P3:O
4*P3:(2,1)


P4:(2,4)
2*P4:(2,1)
3*P4:O
4*P4:(2,4)


P5:(3,1)
2*P5:(0,1)
3*P5:(2,4)
4*P5:(4,2)
5*P5:(4,3)
6*P5:(2,1)
7*P5:(0,4)
8*P5:(3,4)
9*P5:O

P6:(3,4)
2*P6:(0,4)
3*P6:(2,1)
4*P6:(4,3)
5*P6:(4,2)
6*P6:(2,4)
7*P6:(0,1)
8*P6:(3,1)
9*P6:O

P7:(4,2)
2*P7:(3,4)
3*P7:(2,4)
4*P7:(0,4)
5*P7:(0,1)
6*P7:(2,1)
7*P7:(3,1)
8*P7:(4,3)
9*P7:O

P8:(4,3)
2*P8:(3,1)
3*P8:(2,1)
4*P8:(0,1)
5*P8:(0,4)
6*P8:(2,4)
7*P8:(3,4)
8*P8:(4,2)
9*P8:O

f:id:pebble8888:20170909165102p:plain

他の楕円曲線でも試してみましょう。

F_{13}
y^{2}=x^{3}+2 x+4

この場合、全ての点の位数が17となります。こういうのはわりと珍しいです。 この群はZ/17Zと同型であるといいます。

F13
d:-464
#EC:17

P1:(0,2)
2*P1:(10,6)
3*P1:(12,1)
4*P1:(2,9)
5*P1:(7,6)
6*P1:(5,10)
7*P1:(9,7)
8*P1:(8,8)
9*P1:(8,5)
10*P1:(9,6)
11*P1:(5,3)
12*P1:(7,7)
13*P1:(2,4)
14*P1:(12,12)
15*P1:(10,7)
16*P1:(0,11)
17*P1:O

P2:(0,11)
2*P2:(10,7)
3*P2:(12,12)
4*P2:(2,4)
5*P2:(7,7)
6*P2:(5,3)
7*P2:(9,6)
8*P2:(8,5)
9*P2:(8,8)
10*P2:(9,7)
11*P2:(5,10)
12*P2:(7,6)
13*P2:(2,9)
14*P2:(12,1)
15*P2:(10,6)
16*P2:(0,2)
17*P2:O

P3:(2,4)
2*P3:(8,5)
3*P3:(7,6)
4*P3:(0,2)
5*P3:(12,12)
6*P3:(9,6)
7*P3:(5,10)
8*P3:(10,6)
9*P3:(10,7)
10*P3:(5,3)
11*P3:(9,7)
12*P3:(12,1)
13*P3:(0,11)
14*P3:(7,7)
15*P3:(8,8)
16*P3:(2,9)
17*P3:O

P4:(2,9)
2*P4:(8,8)
3*P4:(7,7)
4*P4:(0,11)
5*P4:(12,1)
6*P4:(9,7)
7*P4:(5,3)
8*P4:(10,7)
9*P4:(10,6)
10*P4:(5,10)
11*P4:(9,6)
12*P4:(12,12)
13*P4:(0,2)
14*P4:(7,6)
15*P4:(8,5)
16*P4:(2,4)
17*P4:O

P5:(5,3)
2*P5:(7,6)
3*P5:(0,11)
4*P5:(9,6)
5*P5:(2,9)
6*P5:(10,7)
7*P5:(8,5)
8*P5:(12,1)
9*P5:(12,12)
10*P5:(8,8)
11*P5:(10,6)
12*P5:(2,4)
13*P5:(9,7)
14*P5:(0,2)
15*P5:(7,7)
16*P5:(5,10)
17*P5:O

P6:(5,10)
2*P6:(7,7)
3*P6:(0,2)
4*P6:(9,7)
5*P6:(2,4)
6*P6:(10,6)
7*P6:(8,8)
8*P6:(12,12)
9*P6:(12,1)
10*P6:(8,5)
11*P6:(10,7)
12*P6:(2,9)
13*P6:(9,6)
14*P6:(0,11)
15*P6:(7,6)
16*P6:(5,3)
17*P6:O

P7:(7,6)
2*P7:(9,6)
3*P7:(10,7)
4*P7:(12,1)
5*P7:(8,8)
6*P7:(2,4)
7*P7:(0,2)
8*P7:(5,10)
9*P7:(5,3)
10*P7:(0,11)
11*P7:(2,9)
12*P7:(8,5)
13*P7:(12,12)
14*P7:(10,6)
15*P7:(9,7)
16*P7:(7,7)
17*P7:O

P8:(7,7)
2*P8:(9,7)
3*P8:(10,6)
4*P8:(12,12)
5*P8:(8,5)
6*P8:(2,9)
7*P8:(0,11)
8*P8:(5,3)
9*P8:(5,10)
10*P8:(0,2)
11*P8:(2,4)
12*P8:(8,8)
13*P8:(12,1)
14*P8:(10,7)
15*P8:(9,6)
16*P8:(7,6)
17*P8:O

P9:(8,5)
2*P9:(0,2)
3*P9:(9,6)
4*P9:(10,6)
5*P9:(5,3)
6*P9:(12,1)
7*P9:(7,7)
8*P9:(2,9)
9*P9:(2,4)
10*P9:(7,6)
11*P9:(12,12)
12*P9:(5,10)
13*P9:(10,7)
14*P9:(9,7)
15*P9:(0,11)
16*P9:(8,8)
17*P9:O

P10:(8,8)
2*P10:(0,11)
3*P10:(9,7)
4*P10:(10,7)
5*P10:(5,10)
6*P10:(12,12)
7*P10:(7,6)
8*P10:(2,4)
9*P10:(2,9)
10*P10:(7,7)
11*P10:(12,1)
12*P10:(5,3)
13*P10:(10,6)
14*P10:(9,6)
15*P10:(0,2)
16*P10:(8,5)
17*P10:O

P11:(9,6)
2*P11:(12,1)
3*P11:(2,4)
4*P11:(5,10)
5*P11:(0,11)
6*P11:(8,5)
7*P11:(10,6)
8*P11:(7,7)
9*P11:(7,6)
10*P11:(10,7)
11*P11:(8,8)
12*P11:(0,2)
13*P11:(5,3)
14*P11:(2,9)
15*P11:(12,12)
16*P11:(9,7)
17*P11:O

P12:(9,7)
2*P12:(12,12)
3*P12:(2,9)
4*P12:(5,3)
5*P12:(0,2)
6*P12:(8,8)
7*P12:(10,7)
8*P12:(7,6)
9*P12:(7,7)
10*P12:(10,6)
11*P12:(8,5)
12*P12:(0,11)
13*P12:(5,10)
14*P12:(2,4)
15*P12:(12,1)
16*P12:(9,6)
17*P12:O

P13:(10,6)
2*P13:(2,9)
3*P13:(5,10)
4*P13:(8,8)
5*P13:(9,6)
6*P13:(7,7)
7*P13:(12,12)
8*P13:(0,11)
9*P13:(0,2)
10*P13:(12,1)
11*P13:(7,6)
12*P13:(9,7)
13*P13:(8,5)
14*P13:(5,3)
15*P13:(2,4)
16*P13:(10,7)
17*P13:O

P14:(10,7)
2*P14:(2,4)
3*P14:(5,3)
4*P14:(8,5)
5*P14:(9,7)
6*P14:(7,6)
7*P14:(12,1)
8*P14:(0,2)
9*P14:(0,11)
10*P14:(12,12)
11*P14:(7,7)
12*P14:(9,6)
13*P14:(8,8)
14*P14:(5,10)
15*P14:(2,9)
16*P14:(10,6)
17*P14:O

P15:(12,1)
2*P15:(5,10)
3*P15:(8,5)
4*P15:(7,7)
5*P15:(10,7)
6*P15:(0,2)
7*P15:(2,9)
8*P15:(9,7)
9*P15:(9,6)
10*P15:(2,4)
11*P15:(0,11)
12*P15:(10,6)
13*P15:(7,6)
14*P15:(8,8)
15*P15:(5,3)
16*P15:(12,12)
17*P15:O

P16:(12,12)
2*P16:(5,3)
3*P16:(8,8)
4*P16:(7,6)
5*P16:(10,6)
6*P16:(0,11)
7*P16:(2,4)
8*P16:(9,6)
9*P16:(9,7)
10*P16:(2,9)
11*P16:(0,2)
12*P16:(10,7)
13*P16:(7,7)
14*P16:(8,5)
15*P16:(5,10)
16*P16:(12,1)
17*P16:O

もう一つ試します。無駄に長くなってきたので、点の位数(Pをn倍した時に無限遠点Oになるもっとも小さな値)だけ表示します。
 F_{71}
 y^{2} = x^{3} - x

有理点の数(=群の位数)は72, 有理点の位数は、2, 3, 4, 9, 12, 18, 36で有理点の数の因数が全て出てきているようです。

F71
d:4
#EC:72

P1:(0,0)
order:2


P2:(1,0)
order:2


P3:(2,19)
order:9


P4:(2,52)
order:9


P5:(3,33)
order:18


P6:(3,38)
order:18


P7:(4,29)
order:9


P8:(4,42)
order:9


P9:(5,7)
order:18


P10:(5,64)
order:18


P11:(9,9)
order:6


P12:(9,62)
order:6


P13:(12,15)
order:36


P14:(12,56)
order:36


P15:(13,14)
order:4


P16:(13,57)
order:4


P17:(14,23)
order:18


P18:(14,48)
order:18


P19:(19,33)
order:3


P20:(19,38)
order:3


P21:(21,9)
order:36


P22:(21,62)
order:36


P23:(23,28)
order:18


P24:(23,43)
order:18


P25:(27,29)
order:36


P26:(27,42)
order:36


P27:(32,17)
order:12


P28:(32,54)
order:12


P29:(33,7)
order:36


P30:(33,64)
order:36


P31:(35,13)
order:18


P32:(35,58)
order:18


P33:(37,8)
order:9


P34:(37,63)
order:9


P35:(40,29)
order:12


P36:(40,42)
order:12


P37:(41,9)
order:36


P38:(41,62)
order:36


P39:(42,8)
order:18


P40:(42,63)
order:18


P41:(43,21)
order:36


P42:(43,50)
order:36


P43:(45,22)
order:36


P44:(45,49)
order:36


P45:(46,34)
order:36


P46:(46,37)
order:36


P47:(47,20)
order:18


P48:(47,51)
order:18


P49:(49,33)
order:18


P50:(49,38)
order:18


P51:(51,16)
order:12


P52:(51,55)
order:12


P53:(53,24)
order:18


P54:(53,47)
order:18


P55:(54,28)
order:36


P56:(54,43)
order:36


P57:(55,31)
order:12


P58:(55,40)
order:12


P59:(56,30)
order:6


P60:(56,41)
order:6


P61:(60,10)
order:4


P62:(60,61)
order:4


P63:(61,2)
order:36


P64:(61,69)
order:36


P65:(63,8)
order:6


P66:(63,63)
order:6


P67:(64,27)
order:36


P68:(64,44)
order:36


P69:(65,28)
order:36


P70:(65,43)
order:36


P71:(70,0)
order:2

f:id:pebble8888:20170909172711p:plain

もう一つ試します。

 F_{13}
 y^{2} = x^{3} + 4

F13
#EC:21

P1:(0,2)
2*P1:(0,11)
3*P1:O
order:3

4*P1:(0,2)

P2:(0,11)
2*P2:(0,2)
3*P2:O
order:3

4*P2:(0,11)

P3:(2,5)
2*P3:(12,9)
3*P3:(8,3)
4*P3:(6,5)
5*P3:(5,8)
6*P3:(7,3)
7*P3:(0,2)
8*P3:(10,9)
9*P3:(11,10)
10*P3:(4,4)
11*P3:(4,9)
12*P3:(11,3)
13*P3:(10,4)
14*P3:(0,11)
15*P3:(7,10)
16*P3:(5,5)
17*P3:(6,8)
18*P3:(8,10)
19*P3:(12,4)
20*P3:(2,8)
21*P3:O
order:21

P4:(2,8)
2*P4:(12,4)
3*P4:(8,10)
4*P4:(6,8)
5*P4:(5,5)
6*P4:(7,10)
7*P4:(0,11)
8*P4:(10,4)
9*P4:(11,3)
10*P4:(4,9)
11*P4:(4,4)
12*P4:(11,10)
13*P4:(10,9)
14*P4:(0,2)
15*P4:(7,3)
16*P4:(5,8)
17*P4:(6,5)
18*P4:(8,3)
19*P4:(12,9)
20*P4:(2,5)
21*P4:O
order:21

P5:(4,4)
2*P5:(2,8)
3*P5:(11,10)
4*P5:(12,4)
5*P5:(10,9)
6*P5:(8,10)
7*P5:(0,2)
8*P5:(6,8)
9*P5:(7,3)
10*P5:(5,5)
11*P5:(5,8)
12*P5:(7,10)
13*P5:(6,5)
14*P5:(0,11)
15*P5:(8,3)
16*P5:(10,4)
17*P5:(12,9)
18*P5:(11,3)
19*P5:(2,5)
20*P5:(4,9)
21*P5:O
order:21

P6:(4,9)
2*P6:(2,5)
3*P6:(11,3)
4*P6:(12,9)
5*P6:(10,4)
6*P6:(8,3)
7*P6:(0,11)
8*P6:(6,5)
9*P6:(7,10)
10*P6:(5,8)
11*P6:(5,5)
12*P6:(7,3)
13*P6:(6,8)
14*P6:(0,2)
15*P6:(8,10)
16*P6:(10,9)
17*P6:(12,4)
18*P6:(11,10)
19*P6:(2,8)
20*P6:(4,4)
21*P6:O
order:21

P7:(5,5)
2*P7:(4,9)
3*P7:(7,3)
4*P7:(2,5)
5*P7:(6,8)
6*P7:(11,3)
7*P7:(0,2)
8*P7:(12,9)
9*P7:(8,10)
10*P7:(10,4)
11*P7:(10,9)
12*P7:(8,3)
13*P7:(12,4)
14*P7:(0,11)
15*P7:(11,10)
16*P7:(6,5)
17*P7:(2,8)
18*P7:(7,10)
19*P7:(4,4)
20*P7:(5,8)
21*P7:O
order:21

P8:(5,8)
2*P8:(4,4)
3*P8:(7,10)
4*P8:(2,8)
5*P8:(6,5)
6*P8:(11,10)
7*P8:(0,11)
8*P8:(12,4)
9*P8:(8,3)
10*P8:(10,9)
11*P8:(10,4)
12*P8:(8,10)
13*P8:(12,9)
14*P8:(0,2)
15*P8:(11,3)
16*P8:(6,8)
17*P8:(2,5)
18*P8:(7,3)
19*P8:(4,9)
20*P8:(5,5)
21*P8:O
order:21

P9:(6,5)
2*P9:(10,9)
3*P9:(11,3)
4*P9:(5,5)
5*P9:(2,8)
6*P9:(8,3)
7*P9:(0,2)
8*P9:(4,9)
9*P9:(7,10)
10*P9:(12,4)
11*P9:(12,9)
12*P9:(7,3)
13*P9:(4,4)
14*P9:(0,11)
15*P9:(8,10)
16*P9:(2,5)
17*P9:(5,8)
18*P9:(11,10)
19*P9:(10,4)
20*P9:(6,8)
21*P9:O
order:21

P10:(6,8)
2*P10:(10,4)
3*P10:(11,10)
4*P10:(5,8)
5*P10:(2,5)
6*P10:(8,10)
7*P10:(0,11)
8*P10:(4,4)
9*P10:(7,3)
10*P10:(12,9)
11*P10:(12,4)
12*P10:(7,10)
13*P10:(4,9)
14*P10:(0,2)
15*P10:(8,3)
16*P10:(2,8)
17*P10:(5,5)
18*P10:(11,3)
19*P10:(10,9)
20*P10:(6,5)
21*P10:O
order:21

P11:(7,3)
2*P11:(11,3)
3*P11:(8,10)
4*P11:(8,3)
5*P11:(11,10)
6*P11:(7,10)
7*P11:O
order:7

8*P11:(7,3)

P12:(7,10)
2*P12:(11,10)
3*P12:(8,3)
4*P12:(8,10)
5*P12:(11,3)
6*P12:(7,3)
7*P12:O
order:7

8*P12:(7,10)

P13:(8,3)
2*P13:(7,3)
3*P13:(11,10)
4*P13:(11,3)
5*P13:(7,10)
6*P13:(8,10)
7*P13:O
order:7

8*P13:(8,3)

P14:(8,10)
2*P14:(7,10)
3*P14:(11,3)
4*P14:(11,10)
5*P14:(7,3)
6*P14:(8,3)
7*P14:O
order:7

8*P14:(8,10)

P15:(10,4)
2*P15:(5,8)
3*P15:(8,10)
4*P15:(4,4)
5*P15:(12,9)
6*P15:(7,10)
7*P15:(0,2)
8*P15:(2,8)
9*P15:(11,3)
10*P15:(6,5)
11*P15:(6,8)
12*P15:(11,10)
13*P15:(2,5)
14*P15:(0,11)
15*P15:(7,3)
16*P15:(12,4)
17*P15:(4,9)
18*P15:(8,3)
19*P15:(5,5)
20*P15:(10,9)
21*P15:O
order:21

P16:(10,9)
2*P16:(5,5)
3*P16:(8,3)
4*P16:(4,9)
5*P16:(12,4)
6*P16:(7,3)
7*P16:(0,11)
8*P16:(2,5)
9*P16:(11,10)
10*P16:(6,8)
11*P16:(6,5)
12*P16:(11,3)
13*P16:(2,8)
14*P16:(0,2)
15*P16:(7,10)
16*P16:(12,9)
17*P16:(4,4)
18*P16:(8,10)
19*P16:(5,8)
20*P16:(10,4)
21*P16:O
order:21

P17:(11,3)
2*P17:(8,3)
3*P17:(7,10)
4*P17:(7,3)
5*P17:(8,10)
6*P17:(11,10)
7*P17:O
order:7

8*P17:(11,3)

P18:(11,10)
2*P18:(8,10)
3*P18:(7,3)
4*P18:(7,10)
5*P18:(8,3)
6*P18:(11,3)
7*P18:O
order:7

8*P18:(11,10)

P19:(12,4)
2*P19:(6,8)
3*P19:(7,10)
4*P19:(10,4)
5*P19:(4,9)
6*P19:(11,10)
7*P19:(0,2)
8*P19:(5,8)
9*P19:(8,3)
10*P19:(2,5)
11*P19:(2,8)
12*P19:(8,10)
13*P19:(5,5)
14*P19:(0,11)
15*P19:(11,3)
16*P19:(4,4)
17*P19:(10,9)
18*P19:(7,3)
19*P19:(6,5)
20*P19:(12,9)
21*P19:O
order:21

P20:(12,9)
2*P20:(6,5)
3*P20:(7,3)
4*P20:(10,9)
5*P20:(4,4)
6*P20:(11,3)
7*P20:(0,11)
8*P20:(5,5)
9*P20:(8,10)
10*P20:(2,8)
11*P20:(2,5)
12*P20:(8,3)
13*P20:(5,8)
14*P20:(0,2)
15*P20:(11,10)
16*P20:(4,9)
17*P20:(10,4)
18*P20:(7,10)
19*P20:(6,8)
20*P20:(12,4)
21*P20:O
order:21

f:id:pebble8888:20180817154045p:plain

しつこいですが、もう一つ試します。

 F_{17}
 y^{2} = x^{3} + 7

F17
#EC:18

P1:(1,5)
2*P1:(2,10)
3*P1:(5,9)
4*P1:(12,1)
5*P1:(12,16)
6*P1:(5,8)
7*P1:(2,7)
8*P1:(1,12)
9*P1:O
order:9

P2:(1,12)
2*P2:(2,7)
3*P2:(5,8)
4*P2:(12,16)
5*P2:(12,1)
6*P2:(5,9)
7*P2:(2,10)
8*P2:(1,5)
9*P2:O
order:9

P3:(2,7)
2*P3:(12,16)
3*P3:(5,9)
4*P3:(1,5)
5*P3:(1,12)
6*P3:(5,8)
7*P3:(12,1)
8*P3:(2,10)
9*P3:O
order:9

P4:(2,10)
2*P4:(12,1)
3*P4:(5,8)
4*P4:(1,12)
5*P4:(1,5)
6*P4:(5,9)
7*P4:(12,16)
8*P4:(2,7)
9*P4:O
order:9

P5:(3,0)
2*P5:O
order:2

P6:(5,8)
2*P6:(5,9)
3*P6:O
order:3

P7:(5,9)
2*P7:(5,8)
3*P7:O
order:3

P8:(6,6)
2*P8:(1,5)
3*P8:(8,14)
4*P8:(2,10)
5*P8:(10,15)
6*P8:(5,9)
7*P8:(15,4)
8*P8:(12,1)
9*P8:(3,0)
10*P8:(12,16)
11*P8:(15,13)
12*P8:(5,8)
13*P8:(10,2)
14*P8:(2,7)
15*P8:(8,3)
16*P8:(1,12)
17*P8:(6,11)
18*P8:O
order:18

P9:(6,11)
2*P9:(1,12)
3*P9:(8,3)
4*P9:(2,7)
5*P9:(10,2)
6*P9:(5,8)
7*P9:(15,13)
8*P9:(12,16)
9*P9:(3,0)
10*P9:(12,1)
11*P9:(15,4)
12*P9:(5,9)
13*P9:(10,15)
14*P9:(2,10)
15*P9:(8,14)
16*P9:(1,5)
17*P9:(6,6)
18*P9:O
order:18

P10:(8,3)
2*P10:(5,8)
3*P10:(3,0)
4*P10:(5,9)
5*P10:(8,14)
6*P10:O
order:6

P11:(8,14)
2*P11:(5,9)
3*P11:(3,0)
4*P11:(5,8)
5*P11:(8,3)
6*P11:O
order:6

P12:(10,2)
2*P12:(12,1)
3*P12:(8,14)
4*P12:(1,12)
5*P12:(15,13)
6*P12:(5,9)
7*P12:(6,6)
8*P12:(2,7)
9*P12:(3,0)
10*P12:(2,10)
11*P12:(6,11)
12*P12:(5,8)
13*P12:(15,4)
14*P12:(1,5)
15*P12:(8,3)
16*P12:(12,16)
17*P12:(10,15)
18*P12:O
order:18

P13:(10,15)
2*P13:(12,16)
3*P13:(8,3)
4*P13:(1,5)
5*P13:(15,4)
6*P13:(5,8)
7*P13:(6,11)
8*P13:(2,10)
9*P13:(3,0)
10*P13:(2,7)
11*P13:(6,6)
12*P13:(5,9)
13*P13:(15,13)
14*P13:(1,12)
15*P13:(8,14)
16*P13:(12,1)
17*P13:(10,2)
18*P13:O
order:18

P14:(12,1)
2*P14:(1,12)
3*P14:(5,9)
4*P14:(2,7)
5*P14:(2,10)
6*P14:(5,8)
7*P14:(1,5)
8*P14:(12,16)
9*P14:O
order:9

P15:(12,16)
2*P15:(1,5)
3*P15:(5,8)
4*P15:(2,10)
5*P15:(2,7)
6*P15:(5,9)
7*P15:(1,12)
8*P15:(12,1)
9*P15:O
order:9

P16:(15,4)
2*P16:(2,7)
3*P16:(8,14)
4*P16:(12,16)
5*P16:(6,11)
6*P16:(5,9)
7*P16:(10,2)
8*P16:(1,5)
9*P16:(3,0)
10*P16:(1,12)
11*P16:(10,15)
12*P16:(5,8)
13*P16:(6,6)
14*P16:(12,1)
15*P16:(8,3)
16*P16:(2,10)
17*P16:(15,13)
18*P16:O
order:18

P17:(15,13)
2*P17:(2,10)
3*P17:(8,3)
4*P17:(12,1)
5*P17:(6,6)
6*P17:(5,8)
7*P17:(10,15)
8*P17:(1,12)
9*P17:(3,0)
10*P17:(1,5)
11*P17:(10,2)
12*P17:(5,9)
13*P17:(6,11)
14*P17:(12,16)
15*P17:(8,14)
16*P17:(2,7)
17*P17:(15,4)
18*P17:O
order:18

f:id:pebble8888:20181104200422p:plain

もう一つ  F_{19}
 y^{2} = x^{3} + 2x + 1

F19
#EC:27

P1:(0,1)
2*P1:(1,17)
3*P1:(8,4)
4*P1:(15,10)
5*P1:(15,9)
6*P1:(8,15)
7*P1:(1,2)
8*P1:(0,18)
9*P1:O
order:9

10*P1:(0,1)

P2:(0,18)
2*P2:(1,2)
3*P2:(8,15)
4*P2:(15,9)
5*P2:(15,10)
6*P2:(8,4)
7*P2:(1,17)
8*P2:(0,1)
9*P2:O
order:9

10*P2:(0,18)

P3:(1,2)
2*P3:(15,9)
3*P3:(8,4)
4*P3:(0,1)
5*P3:(0,18)
6*P3:(8,15)
7*P3:(15,10)
8*P3:(1,17)
9*P3:O
order:9

10*P3:(1,2)

P4:(1,17)
2*P4:(15,10)
3*P4:(8,15)
4*P4:(0,18)
5*P4:(0,1)
6*P4:(8,4)
7*P4:(15,9)
8*P4:(1,2)
9*P4:O
order:9

10*P4:(1,17)

P5:(4,4)
2*P5:(18,13)
3*P5:(1,2)
4*P5:(6,1)
5*P5:(16,14)
6*P5:(15,9)
7*P5:(9,11)
8*P5:(11,9)
9*P5:(8,4)
10*P5:(7,15)
11*P5:(13,1)
12*P5:(0,1)
13*P5:(12,9)
14*P5:(12,10)
15*P5:(0,18)
16*P5:(13,18)
17*P5:(7,4)
18*P5:(8,15)
19*P5:(11,10)
20*P5:(9,8)
21*P5:(15,10)
22*P5:(16,5)
23*P5:(6,18)
24*P5:(1,17)
25*P5:(18,6)
26*P5:(4,15)
27*P5:O
order:27

P6:(4,15)
2*P6:(18,6)
3*P6:(1,17)
4*P6:(6,18)
5*P6:(16,5)
6*P6:(15,10)
7*P6:(9,8)
8*P6:(11,10)
9*P6:(8,15)
10*P6:(7,4)
11*P6:(13,18)
12*P6:(0,18)
13*P6:(12,10)
14*P6:(12,9)
15*P6:(0,1)
16*P6:(13,1)
17*P6:(7,15)
18*P6:(8,4)
19*P6:(11,9)
20*P6:(9,11)
21*P6:(15,9)
22*P6:(16,14)
23*P6:(6,1)
24*P6:(1,2)
25*P6:(18,13)
26*P6:(4,4)
27*P6:O
order:27

P7:(6,1)
2*P7:(11,9)
3*P7:(0,1)
4*P7:(13,18)
5*P7:(9,8)
6*P7:(1,17)
7*P7:(4,4)
8*P7:(16,14)
9*P7:(8,4)
10*P7:(12,9)
11*P7:(7,4)
12*P7:(15,10)
13*P7:(18,6)
14*P7:(18,13)
15*P7:(15,9)
16*P7:(7,15)
17*P7:(12,10)
18*P7:(8,15)
19*P7:(16,5)
20*P7:(4,15)
21*P7:(1,2)
22*P7:(9,11)
23*P7:(13,1)
24*P7:(0,18)
25*P7:(11,10)
26*P7:(6,18)
27*P7:O
order:27

P8:(6,18)
2*P8:(11,10)
3*P8:(0,18)
4*P8:(13,1)
5*P8:(9,11)
6*P8:(1,2)
7*P8:(4,15)
8*P8:(16,5)
9*P8:(8,15)
10*P8:(12,10)
11*P8:(7,15)
12*P8:(15,9)
13*P8:(18,13)
14*P8:(18,6)
15*P8:(15,10)
16*P8:(7,4)
17*P8:(12,9)
18*P8:(8,4)
19*P8:(16,14)
20*P8:(4,4)
21*P8:(1,17)
22*P8:(9,8)
23*P8:(13,18)
24*P8:(0,1)
25*P8:(11,9)
26*P8:(6,1)
27*P8:O
order:27

P9:(7,4)
2*P9:(9,11)
3*P9:(1,17)
4*P9:(12,10)
5*P9:(6,1)
6*P9:(15,10)
7*P9:(13,1)
8*P9:(4,4)
9*P9:(8,15)
10*P9:(11,9)
11*P9:(18,6)
12*P9:(0,18)
13*P9:(16,14)
14*P9:(16,5)
15*P9:(0,1)
16*P9:(18,13)
17*P9:(11,10)
18*P9:(8,4)
19*P9:(4,15)
20*P9:(13,18)
21*P9:(15,9)
22*P9:(6,18)
23*P9:(12,9)
24*P9:(1,2)
25*P9:(9,8)
26*P9:(7,15)
27*P9:O
order:27

P10:(7,15)
2*P10:(9,8)
3*P10:(1,2)
4*P10:(12,9)
5*P10:(6,18)
6*P10:(15,9)
7*P10:(13,18)
8*P10:(4,15)
9*P10:(8,4)
10*P10:(11,10)
11*P10:(18,13)
12*P10:(0,1)
13*P10:(16,5)
14*P10:(16,14)
15*P10:(0,18)
16*P10:(18,6)
17*P10:(11,9)
18*P10:(8,15)
19*P10:(4,4)
20*P10:(13,1)
21*P10:(15,10)
22*P10:(6,1)
23*P10:(12,10)
24*P10:(1,17)
25*P10:(9,11)
26*P10:(7,4)
27*P10:O
order:27

P11:(8,4)
2*P11:(8,15)
3*P11:O
order:3

4*P11:(8,4)

P12:(8,15)
2*P12:(8,4)
3*P12:O
order:3

4*P12:(8,15)

P13:(9,8)
2*P13:(12,9)
3*P13:(15,9)
4*P13:(4,15)
5*P13:(11,10)
6*P13:(0,1)
7*P13:(16,14)
8*P13:(18,6)
9*P13:(8,15)
10*P13:(13,1)
11*P13:(6,1)
12*P13:(1,17)
13*P13:(7,4)
14*P13:(7,15)
15*P13:(1,2)
16*P13:(6,18)
17*P13:(13,18)
18*P13:(8,4)
19*P13:(18,13)
20*P13:(16,5)
21*P13:(0,18)
22*P13:(11,9)
23*P13:(4,4)
24*P13:(15,10)
25*P13:(12,10)
26*P13:(9,11)
27*P13:O
order:27

P14:(9,11)
2*P14:(12,10)
3*P14:(15,10)
4*P14:(4,4)
5*P14:(11,9)
6*P14:(0,18)
7*P14:(16,5)
8*P14:(18,13)
9*P14:(8,4)
10*P14:(13,18)
11*P14:(6,18)
12*P14:(1,2)
13*P14:(7,15)
14*P14:(7,4)
15*P14:(1,17)
16*P14:(6,1)
17*P14:(13,1)
18*P14:(8,15)
19*P14:(18,6)
20*P14:(16,14)
21*P14:(0,1)
22*P14:(11,10)
23*P14:(4,15)
24*P14:(15,9)
25*P14:(12,9)
26*P14:(9,8)
27*P14:O
order:27

P15:(11,9)
2*P15:(13,18)
3*P15:(1,17)
4*P15:(16,14)
5*P15:(12,9)
6*P15:(15,10)
7*P15:(18,13)
8*P15:(7,15)
9*P15:(8,15)
10*P15:(4,15)
11*P15:(9,11)
12*P15:(0,18)
13*P15:(6,18)
14*P15:(6,1)
15*P15:(0,1)
16*P15:(9,8)
17*P15:(4,4)
18*P15:(8,4)
19*P15:(7,4)
20*P15:(18,6)
21*P15:(15,9)
22*P15:(12,10)
23*P15:(16,5)
24*P15:(1,2)
25*P15:(13,1)
26*P15:(11,10)
27*P15:O
order:27

P16:(11,10)
2*P16:(13,1)
3*P16:(1,2)
4*P16:(16,5)
5*P16:(12,10)
6*P16:(15,9)
7*P16:(18,6)
8*P16:(7,4)
9*P16:(8,4)
10*P16:(4,4)
11*P16:(9,8)
12*P16:(0,1)
13*P16:(6,1)
14*P16:(6,18)
15*P16:(0,18)
16*P16:(9,11)
17*P16:(4,15)
18*P16:(8,15)
19*P16:(7,15)
20*P16:(18,13)
21*P16:(15,10)
22*P16:(12,9)
23*P16:(16,14)
24*P16:(1,17)
25*P16:(13,18)
26*P16:(11,9)
27*P16:O
order:27

P17:(12,9)
2*P17:(4,15)
3*P17:(0,1)
4*P17:(18,6)
5*P17:(13,1)
6*P17:(1,17)
7*P17:(7,15)
8*P17:(6,18)
9*P17:(8,4)
10*P17:(16,5)
11*P17:(11,9)
12*P17:(15,10)
13*P17:(9,11)
14*P17:(9,8)
15*P17:(15,9)
16*P17:(11,10)
17*P17:(16,14)
18*P17:(8,15)
19*P17:(6,1)
20*P17:(7,4)
21*P17:(1,2)
22*P17:(13,18)
23*P17:(18,13)
24*P17:(0,18)
25*P17:(4,4)
26*P17:(12,10)
27*P17:O
order:27

P18:(12,10)
2*P18:(4,4)
3*P18:(0,18)
4*P18:(18,13)
5*P18:(13,18)
6*P18:(1,2)
7*P18:(7,4)
8*P18:(6,1)
9*P18:(8,15)
10*P18:(16,14)
11*P18:(11,10)
12*P18:(15,9)
13*P18:(9,8)
14*P18:(9,11)
15*P18:(15,10)
16*P18:(11,9)
17*P18:(16,5)
18*P18:(8,4)
19*P18:(6,18)
20*P18:(7,15)
21*P18:(1,17)
22*P18:(13,1)
23*P18:(18,6)
24*P18:(0,1)
25*P18:(4,15)
26*P18:(12,9)
27*P18:O
order:27

P19:(13,1)
2*P19:(16,5)
3*P19:(15,9)
4*P19:(7,4)
5*P19:(4,4)
6*P19:(0,1)
7*P19:(6,18)
8*P19:(9,11)
9*P19:(8,15)
10*P19:(18,13)
11*P19:(12,9)
12*P19:(1,17)
13*P19:(11,9)
14*P19:(11,10)
15*P19:(1,2)
16*P19:(12,10)
17*P19:(18,6)
18*P19:(8,4)
19*P19:(9,8)
20*P19:(6,1)
21*P19:(0,18)
22*P19:(4,15)
23*P19:(7,15)
24*P19:(15,10)
25*P19:(16,14)
26*P19:(13,18)
27*P19:O
order:27

P20:(13,18)
2*P20:(16,14)
3*P20:(15,10)
4*P20:(7,15)
5*P20:(4,15)
6*P20:(0,18)
7*P20:(6,1)
8*P20:(9,8)
9*P20:(8,4)
10*P20:(18,6)
11*P20:(12,10)
12*P20:(1,2)
13*P20:(11,10)
14*P20:(11,9)
15*P20:(1,17)
16*P20:(12,9)
17*P20:(18,13)
18*P20:(8,15)
19*P20:(9,11)
20*P20:(6,18)
21*P20:(0,1)
22*P20:(4,4)
23*P20:(7,4)
24*P20:(15,9)
25*P20:(16,5)
26*P20:(13,1)
27*P20:O
order:27

P21:(15,9)
2*P21:(0,1)
3*P21:(8,15)
4*P21:(1,17)
5*P21:(1,2)
6*P21:(8,4)
7*P21:(0,18)
8*P21:(15,10)
9*P21:O
order:9

10*P21:(15,9)

P22:(15,10)
2*P22:(0,18)
3*P22:(8,4)
4*P22:(1,2)
5*P22:(1,17)
6*P22:(8,15)
7*P22:(0,1)
8*P22:(15,9)
9*P22:O
order:9

10*P22:(15,10)

P23:(16,5)
2*P23:(7,4)
3*P23:(0,1)
4*P23:(9,11)
5*P23:(18,13)
6*P23:(1,17)
7*P23:(11,10)
8*P23:(12,10)
9*P23:(8,4)
10*P23:(6,1)
11*P23:(4,15)
12*P23:(15,10)
13*P23:(13,18)
14*P23:(13,1)
15*P23:(15,9)
16*P23:(4,4)
17*P23:(6,18)
18*P23:(8,15)
19*P23:(12,9)
20*P23:(11,9)
21*P23:(1,2)
22*P23:(18,6)
23*P23:(9,8)
24*P23:(0,18)
25*P23:(7,15)
26*P23:(16,14)
27*P23:O
order:27

P24:(16,14)
2*P24:(7,15)
3*P24:(0,18)
4*P24:(9,8)
5*P24:(18,6)
6*P24:(1,2)
7*P24:(11,9)
8*P24:(12,9)
9*P24:(8,15)
10*P24:(6,18)
11*P24:(4,4)
12*P24:(15,9)
13*P24:(13,1)
14*P24:(13,18)
15*P24:(15,10)
16*P24:(4,15)
17*P24:(6,1)
18*P24:(8,4)
19*P24:(12,10)
20*P24:(11,10)
21*P24:(1,17)
22*P24:(18,13)
23*P24:(9,11)
24*P24:(0,1)
25*P24:(7,4)
26*P24:(16,5)
27*P24:O
order:27

P25:(18,6)
2*P25:(6,18)
3*P25:(15,10)
4*P25:(11,10)
5*P25:(7,4)
6*P25:(0,18)
7*P25:(12,9)
8*P25:(13,1)
9*P25:(8,4)
10*P25:(9,11)
11*P25:(16,14)
12*P25:(1,2)
13*P25:(4,4)
14*P25:(4,15)
15*P25:(1,17)
16*P25:(16,5)
17*P25:(9,8)
18*P25:(8,15)
19*P25:(13,18)
20*P25:(12,10)
21*P25:(0,1)
22*P25:(7,15)
23*P25:(11,9)
24*P25:(15,9)
25*P25:(6,1)
26*P25:(18,13)
27*P25:O
order:27

P26:(18,13)
2*P26:(6,1)
3*P26:(15,9)
4*P26:(11,9)
5*P26:(7,15)
6*P26:(0,1)
7*P26:(12,10)
8*P26:(13,18)
9*P26:(8,15)
10*P26:(9,8)
11*P26:(16,5)
12*P26:(1,17)
13*P26:(4,15)
14*P26:(4,4)
15*P26:(1,2)
16*P26:(16,14)
17*P26:(9,11)
18*P26:(8,4)
19*P26:(13,1)
20*P26:(12,9)
21*P26:(0,18)
22*P26:(7,4)
23*P26:(11,10)
24*P26:(15,10)
25*P26:(6,18)
26*P26:(18,6)
27*P26:O
order:27

f:id:pebble8888:20190101214238p:plain