加权晶格路径

时间:2018-12-18 00:42:58

标签: python algorithm

对于此链接(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)

1 个答案:

答案 0 :(得分:0)

尝试查看modular exponentiation。这样会更有效,但是我不确定是否会足够有效。顺便说一句,您使用的Python pow内置函数可以采用第三个参数-模数。使用它进行模幂运算。

解决问题(其结果被调制)时,经验法则是在计算期间尽可能使用模数。因此,您可以确保所使用的数字不会比模数大。