为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

aluckdog 2023-08-15 17:18:03
下面的代码将测试用例的数量作为第一个输入值(a),然后将(a)次2之间的值1≤x≤y≤10^9作为第二个输入值。代码的输出是可被代码中定义的值整除的值的数量、完全平方数以及满足两个条件的值的数量。代码对于较小的值可以顺利运行,但对于较大的值,运行时间会增加。我需要运行时间少于 5 秒。import numpy as npa = 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))))
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

不需要使用 np.array,在这种情况下它不会比内置类型更快(甚至更慢)。其他一些想法:

  • 打印需要时间,因此您可以将结果附加到某个列表并最后打印出来。

  • 将条件结果(可被 12 和完全平方整除)保存到单独的列表中,然后从这两个列表中创建一个集合将使第三个条件更快(您将显着增加内存占用)

  • 这样的测试效率很低。例如第一个条件:“找到范围 (a,b) 中可被 12 整除的项目数” - 我会找到该范围内可被 12 整除的第一个数字(称为 x ),最后一个数字可被 12 整除(称为,然后(y-x)/12 + 1应该产生项目数量;无需检查所有这些。

第二个和第三个条件,只需生成该范围内的正方形列表:找到范围内的最小正方形(称为x),找到范围内的最大正方形(称为y)。进而sum( ((x**2)%12 == 0) for x in range(x,y+1) )

实际上这里没有太多的编程,更像是数学。如果您收到了请告诉我们。干杯。


查看完整回答
反对 回复 2023-08-15
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信