问题描述
我想计算一个在列表中的点上消失的多项式的系数,例如下面的代码有三个根,1、2和3。不知道这些分量有多少根,所以我需要得到它们的最终系数。
from collections import defaultdict
mult = defaultdict(int)
a=[1,2,3]
def loop_rec(a,n,item1,item2):
if n > 0:
for i1,c1 in zip([1,0],[1,-a[n]]):
for i2,c2 in zip(item1,item2):
mult[i1 + i2] += c1 * c2
mult_sorted = tuple(sorted(mult.items(),reverse=True))
item1 = [item[0] for item in mult_sorted]
item2 = [item[1] for item in mult_sorted]
a=a[:n]
loop_rec(a,n - 1,item2)
else:
return (item1,item2)
(a,b)=loop_rec(a,len(a)-1,[0],[1])
[out]: cannot unpack non-iterable NoneType object
解决方法
我找到了解决方案。
from collections import defaultdict
mult = defaultdict(int)
a=[1,2,3]
def loop_rec(a,n,item1,item2):
if n >= 0:
mult = defaultdict(int)
for i1,c1 in zip([1,0],[1,a[n]]):
for i2,c2 in zip(item1,item2):
mult[i1 + i2] += c1 * c2
mult_sorted = tuple(sorted(mult.items(),reverse=True))
item1 = [item[0] for item in mult_sorted]
item2 = [item[1] for item in mult_sorted]
a=a[:n]
return loop_rec(a,n - 1,item2)
else:
return (item1,item2)
(a,b)=loop_rec(a,len(a)-1,[0],[1])
print(a)
print(b)
您可以计算在没有 NumPy 的情况下从列表的根上消失的乘法多项式,它在密码学领域非常有用,只要我们有字段元素并且需要一个列表作为结果,而不是在 NumPy 的类中。
>[out]:
[3,1,0]
[1,6,11,6]