找到最近的有限制的平方数

finding nearest square number with a limit

嘿,所以我想编写代码来查找小于或等于某个数字 (x) 的最近平方数。我尝试了以下方法:

m = 0 
base = 0 
while m <= x:
   if m > x:
      break
   m = base**2
   base += 1

print(m) 

然而,这给出了数字 x 之后最近的正方形,尽管打断了,因为 m > x 已经分配给了 m。我如何在 m > x 之前停止循环?

if m > x 是多余的。仅当 m <= x 为真时才会进入循环体,如果为真,则 m > x 永远不会,因此 break 永远不会 运行.

为了回答你的问题,在不了解更多数学知识的情况下,我只介绍第二个变量 prev_m,然后使用它:

m = 0
prev_m = m
base = 0 
while m <= x:
    prev_m = m
    m = base**2
    base += 1

print(prev_m)  # Then use prev_m instead

使用 math 模块有一种更简单的方法:

import math 
y = math.sqrt(x) #find the square root of x
if y.is_integer() == False: #check y is not a whole number
    print(math.pow(int(y),2)) # find the square root of the nearest whole number to y

大多数答案都是基于计算一平方太多然后使用前一个。
但是有没有可能知道下一个方块是否会太大,不用计算

m = 0
base = -1
while base*2 + m < x:
    base += 1
    m = base**2

print(m)

免责声明:只是一个有趣的答案来思考为什么这有效。