下面的代码将测试用例的数量作为第一个输入值(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 ),然后
(y-x)/12 + 1
应该产生项目数量;无需检查所有这些。
第二个和第三个条件,只需生成该范围内的正方形列表:找到范围内的最小正方形(称为x),找到范围内的最大正方形(称为y)。进而sum( ((x**2)%12 == 0) for x in range(x,y+1) )
实际上这里没有太多的编程,更像是数学。如果您收到了请告诉我们。干杯。
添加回答
举报
0/150
提交
取消