查找有限制的最近平方数

问题描述

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

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

print(m) 

但是,尽管已将m插入x,但仍给出了数字x之后的最接近平方,因为已经将m> x分配给了m。我如何在m> x之前停止循环?

解决方法

if m > x是多余的。仅当m <= x为True时才输入循环体,如果为True,则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)

免责声明:这是一个有趣的答案,以考虑它为什么起作用。