3 回答

TA贡献1802条经验 获得超5个赞
您可能不想为此循环。如果 k 和 m 相距很远,则需要很长时间。
给定 k < m,你想计算多少个整数 l 使得 k < l^2 < m。最小可能的整数是 floor( sqrt(k) +1 ),最大可能的整数是 ceil(sqrt(m)-1)。这些整数的数量是:
import math
def sq_between(k,m):
return math.ceil(m**0.5-1) - math.floor(k**0.5+1) +1
这允许
sq_between(16,100)
产生:
5

TA贡献1752条经验 获得超4个赞
这是您的功能的另一个版本,似乎可以满足您的要求。
k = 16
m = 100
perfect_squares = []
for i in range(m):
if i**2 < k:
continue
if i**2 > m:
break
perfect_squares.append(i**2)
print(perfect_squares)

TA贡献1796条经验 获得超10个赞
您的代码混淆了第二个 while 循环中的所有内容。如果您进一步解释一下您在那里尝试做什么,我可能能够解释为什么您的想法不起作用。
我会按如下方式更改您的代码以使其正常工作:
k = 10
m = 40
i = 0
q = 0
while i ** 2 < m:
if i ** 2 > k:
print(i)
q += 1
i += 1
print (q)
通过利用每个平方数都可以通过square = sum from i = 1 to n (2 * i + 1)有一个简单的方法来加速上述算法的事实- 但算法会变得更长……
添加回答
举报