我正在尝试编写一种方法来在Python中获取给定范围内的所有完美正方形。大范围,如2621163和520001400002.现在明显迭代范围并检查数字是否完美如此
def is_square(n):
return math.sqrt(n).is_integer()
然后打印它对于大范围是愚蠢的(适用于小范围)并且将永远。我想知道是否有任何Python魔法或mathemagic(比如改进的丢番图方程式),我可以为此目的利用它。
编辑:我也在使用Python 3.X,所以我可以使用大整数。
答案 0 :(得分:9)
您可以简单地找到在指定范围内具有正方形的最小和最大数字。然后你可以返回该范围内每个数字的方块。
import math
def perfect_squares(min, max):
lowest = int(math.ceil(math.sqrt(min)))
highest = int(math.sqrt(max))
return (n**2 for n in range(lowest, highest + 1))
答案 1 :(得分:0)
想象一下这个数字是34929456,你可以知道它不是一个完美的正方形,因为当它分裂时3:4:9:2:9:4:5:6 = 42. 42不是正方形数字,这意味着34929456不是一个完美的广场! (我没有使用任何计算器)现在我们知道它不是一个完美的正方形,你会围绕它向上/向下... 所以,你取最后2位数,56!单个数字56是7(时间)8 = 56! 34929456是一个8位数字,因此意味着8-7 = 1 + 4 = 5。所以这意味着答案在5000到6000之间。现在,你做一点猜测。让我们做5500平方= 30250000.所以我们知道平方根有点大!现在让我们试试5910. 5910平方= 34928100.所以我们知道答案是在5910和5911之间!谢谢阅读! :P,希望它有所帮助!
答案 2 :(得分:0)
li
答案 3 :(得分:0)
不使用函数的简单python代码
import math
num=500
for i in range(1,math.ceil(math.sqrt(num))):
print(i*i)
答案 4 :(得分:-1)
def perfect_squares(start, stop):
return (i*i for i in xrange(math.ceil(math.sqrt(start)), math.floor(math.sqrt(stop)) + 1))