Python中的模块化指数

时间:2015-06-11 16:02:30

标签: python algorithm python-2.7

我试图使用Python 2.7.9作为我的编码语言来解决SPOJ中的ZSUM问题,并设计了一个程序来实现。由于代码运行完美但在判断时给出了TLE,我猜它还不够快。是否有可能优化以下代码以满足判断要求,或者使用Python无法击败挑战。

问题的链接:http://www.spoj.com/problems/ZSUM/

def zsum(n,k):
  a=2*pow(n-1,k,10000007)
  b=pow(n,k,10000007)
  c=2*pow(n-1,n-1,10000007)
  d=pow(n,n,10000007)
  zsum=(a+b+c+d)%10000007
  print zsum

def main():
  while True:
    n,k=map(int,raw_input().split())
    if n==k==0:
        break
    else:
        zsum(n,k)
 main()

2 个答案:

答案 0 :(得分:0)

我不知道这是否会有所帮助(如果您阅读了问题的评论,您会看到有人说在Python中无法解决这种问题 - 这可能发生在语言较慢的在线评委身上)但你可以优化代码:

def zsum(n,k):
  a=2*pow(n-1,k,10000007)   # (1)
  b=pow(n,k,10000007)       # (2)
  c=2*pow(n-1,n-1,10000007) # (1)
  d=pow(n,n,10000007)       # (2)
  zsum=(a+b+c+d)%10000007
  print zsum

请注意,在(1)中,您计算​​pow(n - 1, min(k, n - 1))两次。您可以计算一次,然后仅对剩下的内容使用模幂运算。与(2)相同。

答案 1 :(得分:0)

由于在总共2335个成功提交中没有接受的python解决方案,我认为,无论您如何优化您的解决方案,它都不可能被python接受。尽管python是一种非常有用的语言,但它在编程竞赛中并不是首选,因为它非常慢(例如与C / C ++相比)。如果您知道如何用C ++编写代码,那么您一定要试一试,尽管您必须编写自己的模幂运算程序。