Python给定范围内平方数查找代码的性能优化咨询
代码优化方案
当然可以优化,而且优化后的运行速度会有显著提升,尤其是当给定的范围[a,b]跨度较大时。
原代码的问题
原代码需要遍历范围内的每一个数,先通过个位模运算过滤部分数,再对剩余数做开平方判断。这种逐个检查的方式在范围较大时,循环次数过多,且浮点数开平方存在精度风险(比如超大数的平方根计算可能出现误差,导致判断错误)。
优化思路
直接计算范围内所有平方数的平方根边界,然后生成对应的平方数,完全避免逐个检查:
- 找到大于等于
a的最小整数平方根start - 找到小于等于
b的最大整数平方根end - 遍历
start到end,每个数的平方就是符合条件的结果
优化后的代码
import math a = int(input()) b = int(input()) start = math.ceil(math.sqrt(a)) end = math.floor(math.sqrt(b)) for num in range(start, end + 1): print(num * num, end=" ")
优化效果说明
- 循环次数大幅减少:比如范围是1到1000000,原代码要循环100万次,优化后只需要循环1000次(从1到1000)
- 避免浮点数精度问题:直接用整数乘法生成平方数,不会出现开平方后的判断误差
- 省去了模运算和开平方判断的额外计算开销
内容的提问来源于stack exchange,提问作者Codeer
相关产品推荐
相关产品推荐

