|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 凡凡的老公 于 2018-4-22 12:46 编辑
本人在做毕设,在写一个函数的时候遇到了问题,在函数的输入值为底下的小数值时,运行结果正确,但当数值变成上面的大整数是,就会报Nonetype的错误,求大佬给指导指导,以下是代码
def findMod(a,m):
if a >= 0:
return a%m
else:
for i in range(20000000):
B = (i*m)-(-a)
if B >= 0:
return B
else:
continue
def niyuan(a, m):
u1,u2,u3 = 1,0,a
v1,v2,v3 = 0,1,m
while v3!=0:
q = u3//v3
v1,v2,v3,u1,u2,u3 = (u1-q*v1),(u2-q*v2),(u3-q*v3),v1,v2,v3
return u1%m
def kp(k_st, x, y, p, a, n):
#传进来的k_st模阶, x, y均为10进制数
#首先把k转换成2进制
k = int(findMod(int(k_st), int(n)))
bin_num = bin(int(k))
#print(bin_num)
#再将2进制数颠倒,取出其前n-2为数
bin_len = len(bin_num) - 2
bin_re_list = []
for i in bin_num[::-1]:
bin_re_list.append(i)
bin_len -= 1
if bin_len == 0:
break
#print(bin_re_list)
#print(len(bin_re_list))
Rx_list = []
Ry_list = []
Rx_list.append(x)
Ry_list.append(y)
for i in range(len(bin_re_list)-1):
fenmu = niyuan(2*y, p)
A = findMod((3*(x**2)+a)*fenmu, p)
x3 = findMod((A**2)-x-x, p)
y3 = findMod(A*(x-x3)-y, p)
Rx_list.append(x3)
Ry_list.append(y3)
x = x3
y = y3
#print(Rx_list)
#print(Ry_list)
#print(len(Rx_list), len(Ry_list))
Rx_list_add = []
Ry_list_add = []
for j in range(len(bin_re_list)):
if int(bin_re_list[j]) == 1:
#print('one')
Rx = Rx_list[int(j)]
Ry = Ry_list[int(j)]
Rx_list_add.append(Rx)
Ry_list_add.append(Ry)
#print(Rx_list_add)
#print(Ry_list_add)
if len(Rx_list_add) == 1:
Qx = Rx_list_add[0]
Qy = Ry_list_add[0]
if len(Rx_list_add) == 2:
xx = Rx_list_add[0]
yy = Ry_list_add[0]
xxx = Rx_list_add[1]
yyy = Ry_list_add[1]
fenmu = niyuan(xxx-xx, p)
A = findMod((yyy-yy)*fenmu, p)
x3 = findMod((A**2)-xx-xxx, p)
y3 = findMod(A*(xx-x3)-yy, p)
Qx = x3
Qy = y3
if len(Rx_list_add) > 2:
xx = Rx_list_add[0]
yy = Ry_list_add[0]
xxx = Rx_list_add[1]
yyy = Ry_list_add[1]
begin_num = 1
while begin_num < len(Rx_list_add):
fenmu = niyuan(xxx-xx, p)
A = findMod((yyy-yy)*fenmu, p)
x3 = findMod((A**2)-xx-xxx, p)
y3 = findMod(A*(xx-x3)-yy, p)
#print(x3, y3)
xx = x3
yy = y3
if begin_num+1 < len(Rx_list_add):
xxx = Rx_list_add[begin_num+1]
yyy = Ry_list_add[begin_num+1]
else:
break
begin_num += 1
Qx = xx
Qy = yy
Q_list = []
Q_list.append(Qx)
Q_list.append(Qy)
return Q_list
k_st = 1939941892181582143063425055015927690442741898190876899856
x = 602046282375688656758213480587526111916698976636884684818
y = 174050332293622031404857552280219410364023488927386650641
p = 6277101735386680763835789423207666416083908700390324961279
a = -3
n = 6277101735386680763835789423176059013767194773182842284081
'''k_st = 7
x = 5
y = 1
p = 17
a = 2
n = 19'''
print(kp(k_st, x, y, p, a, n))
|
-
报错提示
|