def MultiPointEK(num, point, a, mod): x1 = point[0] y1 = point[1] newpoint = TwicePointEK(point, a, mod) counter = 2 [b]while counter < num: newpoint = AdditivePointsEK(point, newpoint, mod, a) counter += 1[/b] finpoint = [newpoint[0], newpoint[1]] return finpoint
Это функция умножения точки на число, вот функция сложения точек, которая вызывается здесь.
def AdditivePointsEK(point1, point2, mod, a): if point1[0] == point2[0] and point1[1] == point2[1]: x = point1[0] y = point1[1] p = [x, y] finpoint = TwicePointEK(p, a, mod) else: x1 = point1[0] x2 = point2[0] y1 = point1[1] y2 = point2[1] promezh = (x2 - x1) % mod promezh = evqlid(mod, promezh) h = ((y2 - y1) * promezh) % mod x3 = (h**2 - x1 - x2) % mod while x3 < 0: x3 += mod y3 = (h * (x1 - x3) - y1) % mod while y3 < 0: y3 += mod finpoint = [x3, y3] return finpoint
Так вот интересуют какие-либо методы оптимизации, при которых этот цикл будет выполняться быстро. Или может, возможно, как-то перестроить код и обойтись без цикла. Мне советовали написать эти части программы на С и уже подключить как модуль. Но времени очень мало, я посмотрел простейший пример такого модуля, и там очень много непонятного для меня. Может кто-то что-то посоветовать? Я знаю, что можно реализовать на классах, но тоже, к сожалению, с классами никогда не работал и за неделю не успею. Заранее спасибо!