yangbongsoo / blockStudy

1 stars 0 forks source link

2.2 파이썬으로 타원곡선 코딩하기 #9

Closed yangbongsoo closed 1 year ago

yangbongsoo commented 2 years ago

우리에게는 곡선 자체보다 곡선 위 개별 점들이 관심사다. 예를 들면, $y^2 = x^3 + 5x + 7$ 곡선에서 $(x,y) = (-1, 1)$ 인 점에만 관심을 가지면 된다. 따라서 특정 곡선의 한 점으로 Point 클래스를 정의한다.

곡선은 $y^2 = x^3 + ax + b$ 의 형식이므로 a 와 b 두 계숫값으로 곡선을 특정할 수 있다.

# 연습문제 2.1
p1 = Point(2, 4, 5, 7)  # False
p2 = Point(-1, -1, 5, 7)  # True
p3 = Point(18, 77, 5, 7)  # True
p4 = Point(5, 7, 5, 7)  # False
# 연습문제 2.2
def __ne__(self, other):
    return not (self == other)
class Point:

    def __init__(self, x, y, a, b):
        self.a = a
        self.b = b
        self.x = x
        self.y = y
        if self.y ** 2 != self.x ** 3 + a * x + b:  # 주어진 점이 곡선 위에 있는지 검사
            raise ValueError('({}, {}) is not on the curve'.format(x, y))

    def __eq__(self, other):  # 두 점은 같은 곡선 위에 있고 그 좌푯값이 동일해야 함
        return self.x == other.x and self.y == other.y and self.a == other.a and self.b == other.b

    # 연습문제 2.2
    def __ne__(self, other):
        return not (self == other)