如何减少Python代码的运行时间

下面的代码将测试用例的数量作为第一个输入值(a),然后将(a)次2之间的值1≤x≤y≤10^9作为第二个输入值。


代码的输出是可被代码中定义的值整除的值的数量、完全平方数以及满足两个条件的值的数量。代码对于较小的值可以顺利运行,但对于较大的值,运行时间会增加。我需要运行时间少于 5 秒。


import numpy as np

a = np.array(input(), dtype=int)



B=[]

for i in range(a):

    b = np.array(input().split(), dtype=int)

    B.append(b)


       

def is_square(n):

    return (n**.5).is_integer()



for a, b in B:    

    print('{}'.format(sum(v % 12 == 0 for v in range(a, b+1))), '{}'.format(sum(is_square(v) for v in range(a, b+1))),'{}'.format(sum((v % 12 == 0) and is_square(v) for v in range(a, b+1))))



aluckdog
浏览 114回答 1
1回答

沧海一幻觉

不需要使用 np.array,在这种情况下它不会比内置类型更快(甚至更慢)。其他一些想法:打印需要时间,因此您可以将结果附加到某个列表并最后打印出来。将条件结果(可被 12 和完全平方整除)保存到单独的列表中,然后从这两个列表中创建一个集合将使第三个条件更快(您将显着增加内存占用)这样的测试效率很低。例如第一个条件:“找到范围 (a,b) 中可被 12 整除的项目数” - 我会找到该范围内可被 12 整除的第一个数字(称为 x ),最后一个数字可被 12 整除(称为y ),然后(y-x)/12 + 1应该产生项目数量;无需检查所有这些。第二个和第三个条件,只需生成该范围内的正方形列表:找到范围内的最小正方形(称为x),找到范围内的最大正方形(称为y)。进而sum( ((x**2)%12 == 0) for x in range(x,y+1) )实际上这里没有太多的编程,更像是数学。如果您收到了请告诉我们。干杯。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python