Advertisement
Guest User

Untitled

a guest
Jan 28th, 2015
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. #y^2 = x^3 + x
  2. #in Z_11 and Z_13
  3.  
  4. #a) Gruppen bestimmen
  5. #b) ord von jedem Gruppenelement
  6.  
  7. MODULE = 13
  8. A = 1
  9.  
  10. def invmod(a):
  11. for d in range(1, MODULE):
  12. r = (d * a) % MODULE
  13. if r == 1:
  14. break
  15. else:
  16. raise ValueError('%d has no inverse mod %d' % (a, p))
  17. return d
  18.  
  19. def calcGroupElements():
  20. res = []
  21. for y in range(MODULE):
  22. for x in range(MODULE):
  23. if pow(y, 2, MODULE) == (pow(x, 3, MODULE) + x) % MODULE:
  24. res.append([x, y])
  25. return res
  26.  
  27. def addPoint(point):
  28. x1 = point[0]
  29. y1 = point[1]
  30.  
  31. s = (3*x1*x1+A)*invmod((2*y1)%MODULE)
  32.  
  33. x2 = (pow(s,2)-2*x1) % MODULE
  34. y2 = ((s*(x1-x2))-y1) % MODULE
  35.  
  36. return [int(x2),int(y2)]
  37.  
  38. def addPoints(p1,p2):
  39.  
  40. s = (p2[1]-p1[1])*invmod((p2[0]-p1[0])%MODULE)
  41.  
  42. x3 = (pow(s,2)-p1[0]-p2[0]) % MODULE
  43. y3 = (s*(p1[0]-x3)-p1[1]) % MODULE
  44.  
  45. return [int(x3),int(y3)]
  46.  
  47. def calcOrderOfEl(point):
  48. if point == [0,0]:
  49. return 2
  50.  
  51. stopPoint = [point[0],-point[1]%MODULE]
  52. curPoint = point
  53. i = 2
  54.  
  55. while not(curPoint == stopPoint):
  56. if(point == curPoint):
  57. curPoint = addPoint(curPoint)
  58. else:
  59. curPoint = addPoints(curPoint,point)
  60. i+=1
  61. return i
  62.  
  63. groupElements = calcGroupElements()
  64. print(groupElements, len(groupElements))
  65.  
  66. for point in groupElements:
  67. print("Order of",point,"\t",calcOrderOfEl(point))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement