При суммировании я хочу иметь возможность выполнять это действие, при котором переменная обновляется при каждом запуске, но на каждом этапе суммирования. Я покажу вам, о чем говорю.
Я использую следующий код:
Код: Выделить всё
from sympy import symbols, summation,Piecewise, invert
x = symbols('n')
def add(P1_c, P2_c, p, k):
if P1_c == 0:
return P2_c # P1 is the point at infinity
if P2_c == 0:
return P1_c # P2 is the point at infinity
x1 = P1_c % k
y1 = P1_c // k
x2 = P2_c % k
y2 = P2_c // k
if x1 == x2 and y1 != y2:
return 0
if x1 == x2 and y1 == y2:
m = (3 * x1 ** 2 * invert(2 * y1, p)) % p
else:
m = ((y2 - y1) * invert(x2 - x1, p)) % p
x3 = (m ** 2 - x1 - x2) % p
y3 = (m * (x1 - x3) - y1) % p
# Return combined number
return x3 + k * y3
def multiply(P_c, scalar, p, k,n):
result= 0 # Point at infinity (neutral element)
current = P_c
result = add(result, current, p, k)
result = add(result, current, p, k)
result = add(result,current,p,k)
# result = point_add(result,current,p,k)
# uncomment to see different results
m = Piecewise(
(result,True)
)
return result
k = 2 ** 256
p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
Gx = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,
0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)[0]
Gy = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,
0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)[1]
G_c = Gx + k * Gy
logic = multiply(G_c, x, p, k, x)
result2 = summation(logic, (x,1, 1)) # Sum of n**2 from n=1 to n=5
print(result2)
Я хочу, чтобы вы помогли мне использовать кусочную функцию Multiply, которая выполняет это поведение за меня. p>
Я хочу, чтобы переменная результата неоднократно обновлялась по одному для каждого шага моего суммирования, вместо того, чтобы указывать это явно, как я это делал в функции умножения.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -summation