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

问题描述 投票:1回答:4

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

def is_square(n):
    return math.sqrt(n).is_integer()

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

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

python-3.x square-root perfect-square
4个回答
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))

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,希望它有所帮助!


0
投票

getting perfect square from 1 to 100 digit using numpy

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)

-1
投票
def perfect_squares(start, stop):
  return (i*i for i in xrange(math.ceil(math.sqrt(start)), math.floor(math.sqrt(stop)) + 1))
© www.soinside.com 2019 - 2024. All rights reserved.