2

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

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

然后打印它对于大范围来说是愚蠢的(对于小范围来说效果很好)并且需要永远。我想知道是否有任何 Python 魔法或数学(比如修改后的丢番图方程)可以用于此目的。

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

4

6 回答 6

11

您可以简单地找到在指定范围内具有正方形的最小和最大数字。然后您可以返回该范围内每个数字的平方。

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))
于 2013-04-13T06:21:21.333 回答
0

想象一下这个数字是 34929456,你可以知道它不是一个完美的正方形,因为当它被分割 3:4:9:2:9:4:5:6= 42. 42 不是一个正方形数字所以意味着 34929456 不是一个完美的正方形!(我没有使用计算器)现在我们知道它不是一个完美的正方形,你会把它向上/向下四舍五入......所以,你取最后两位数字,56!用个位数计算 56 是 7(Times)8=56!34929456 是一个 8 位数字,因此意味着 8-7=1+4=5。所以这意味着答案在 5000 到 6000 之间。现在,你做一点猜测。让我们做 5500 平方 = 30250000。所以我们知道平方根有点大!现在让我们试试 5910。5910 的平方 = 34928100。所以知道我们知道答案在 5910 和 5911 之间!谢谢阅读!:P,希望对您有所帮助!

于 2014-01-10T16:06:59.240 回答
0

你意识到如果你知道第一个和最后一个最接近的完美正方形,剩下的只是它们之间的范围。我会这样计算:

import math

def all_squares(a,b):#a is the starting point whereas b is the end of range
    smallest = int(math.ceil(math.sqrt(a)))#perfect square closest to lower bound (rounded up)
    largest = int(math.sqrt(b))#perfect square closest to upper bound (rounded down)
    squares = []
    for s in range(smallest, largest+1):
        squares.append(s**2)
    return squares

于 2021-08-12T10:16:45.890 回答
0

使用 numpy 从 1 到 100 位获得完美平方

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)
于 2019-03-01T01:51:58.407 回答
0

没有使用函数的简单python代码

import math
num=500
for i in range(1,math.ceil(math.sqrt(num))):
    print(i*i)
于 2021-06-27T16:45:30.020 回答
-1
def perfect_squares(start, stop):
  return (i*i for i in xrange(math.ceil(math.sqrt(start)), math.floor(math.sqrt(stop)) + 1))
于 2013-04-13T06:16:40.103 回答