Python - 在给定的大数范围内找到所有完美正方形的最快方法

Sla*_*ast 1 perfect-square square-root python-3.x

我正在尝试编写一种方法来获取Python中给定范围内的所有完美正方形.大范围,如2621163和520001400002.现在明显迭代范围并检查数字是否完美如此

def is_square(n):
    return math.sqrt(n).is_integer()
Run Code Online (Sandbox Code Playgroud)

然后打印它对于大范围是愚蠢的(适用于小范围)并将永远.我想知道是否有任何Python魔法或mathemagic(比如改进的丢番图方程式)我可以为此目的利用.

编辑:我也使用Python 3.X所以我可以使用大整数.

grc*_*grc 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))
Run Code Online (Sandbox Code Playgroud)