Python 3.x Python—在给定的大量范围内找到所有完美正方形的最快方法

Python 3.x Python—在给定的大量范围内找到所有完美正方形的最快方法,python-3.x,square-root,perfect-square,Python 3.x,Square Root,Perfect Square,我正在尝试编写一个方法,以在Python中获得给定范围内的所有完美正方形。范围较大,如2621163和52000140002之间。现在很明显,在这个范围内迭代,检查一个数字是否是完美的 def is_square(n): return math.sqrt(n).is_integer() 然后打印它是愚蠢的大范围(工程伟大的小范围),将永远。我想知道是否有任何Python魔法或mathemagic(比如修改的丢番图方程)可以用于此目的 编辑:我也在使用Python 3.X,因此我可以使用

我正在尝试编写一个方法,以在Python中获得给定范围内的所有完美正方形。范围较大,如2621163和52000140002之间。现在很明显,在这个范围内迭代,检查一个数字是否是完美的

def is_square(n):
    return math.sqrt(n).is_integer()
然后打印它是愚蠢的大范围(工程伟大的小范围),将永远。我想知道是否有任何Python魔法或mathemagic(比如修改的丢番图方程)可以用于此目的


编辑:我也在使用Python 3.X,因此我可以使用大整数。

您只需找到指定范围内具有平方的最小和最大数字。然后可以返回该范围内每个数字的平方

def perfect_squares(start, stop):
  return (i*i for i in xrange(math.ceil(math.sqrt(start)), math.floor(math.sqrt(stop)) + 1))
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、 希望有帮助

使用numpy获得1到100位的完美正方形
完美平方(PS)数的位数总和不一定是完美平方,例如64、256。
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)