Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #y^2 = x^3 + x
- #in Z_11 and Z_13
- #a) Gruppen bestimmen
- #b) ord von jedem Gruppenelement
- MODULE = 13
- A = 1
- def invmod(a):
- for d in range(1, MODULE):
- r = (d * a) % MODULE
- if r == 1:
- break
- else:
- raise ValueError('%d has no inverse mod %d' % (a, p))
- return d
- def calcGroupElements():
- res = []
- for y in range(MODULE):
- for x in range(MODULE):
- if pow(y, 2, MODULE) == (pow(x, 3, MODULE) + x) % MODULE:
- res.append([x, y])
- return res
- def addPoint(point):
- x1 = point[0]
- y1 = point[1]
- s = (3*x1*x1+A)*invmod((2*y1)%MODULE)
- x2 = (pow(s,2)-2*x1) % MODULE
- y2 = ((s*(x1-x2))-y1) % MODULE
- return [int(x2),int(y2)]
- def addPoints(p1,p2):
- s = (p2[1]-p1[1])*invmod((p2[0]-p1[0])%MODULE)
- x3 = (pow(s,2)-p1[0]-p2[0]) % MODULE
- y3 = (s*(p1[0]-x3)-p1[1]) % MODULE
- return [int(x3),int(y3)]
- def calcOrderOfEl(point):
- if point == [0,0]:
- return 2
- stopPoint = [point[0],-point[1]%MODULE]
- curPoint = point
- i = 2
- while not(curPoint == stopPoint):
- if(point == curPoint):
- curPoint = addPoint(curPoint)
- else:
- curPoint = addPoints(curPoint,point)
- i+=1
- return i
- groupElements = calcGroupElements()
- print(groupElements, len(groupElements))
- for point in groupElements:
- print("Order of",point,"\t",calcOrderOfEl(point))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement