对于此链接(https://projecteuler.net/problem=638)上的算法,我编写了以下代码,但是由于它处理的是大整数并且需要很长时间,因此我正在寻找提高效率的方法,请阅读我的代码并提出一些建议,
def WeightedLatticePaths(k):
sigma = []
for m in range(1,k+1):
X = pow(10,m)+m
n = 2*X
x=0
y=0
paths =[]
for i in range(pow(2,n)):
if ('{0:0%db}'%n).format(i).count('1')==X:
paths.append(('{0:0%db}'%n).format(i))
c = []
for i in range(len(paths)):
a = []
route = paths[i]
for item in route:
if item=='0':
y+=1
if item=='1':
x+=1
a.append(y)
p = sum(a)
c.append(pow(m,p))
C = sum(c)
sigma.append(C)
return sum(sigma)%(1000000007)
答案 0 :(得分:0)
尝试查看modular exponentiation。这样会更有效,但是我不确定是否会足够有效。顺便说一句,您使用的Python pow内置函数可以采用第三个参数-模数。使用它进行模幂运算。
解决问题(其结果被调制)时,经验法则是在计算期间尽可能使用模数。因此,您可以确保所使用的数字不会比模数大。