我正在尝试编写一种方法来获取Python中给定范围内的所有完美正方形。大范围,如2621163和520001400002.现在明显迭代范围并检查数字是否完美如此
def is_square(n):
return math.sqrt(n).is_integer()
然后打印它对于大范围是愚蠢的(适用于小范围)并将永远。我想知道是否有任何Python魔法或mathemagic(比如改进的丢番图方程式)我可以为此目的利用。
编辑:我也使用Python 3.X所以我可以使用大整数。
您可以简单地找到在指定范围内具有正方形的最小和最大数字。然后,您可以返回该范围内每个数字的方块。
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))
想象一下这个数字是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,希望它有所帮助!
import numpy as np
a={int(np.sqrt(x)) for x in range(1,101)}
b= np.power(list(a),2)
print(a)
print(b)
def perfect_squares(start, stop):
return (i*i for i in xrange(math.ceil(math.sqrt(start)), math.floor(math.sqrt(stop)) + 1))