2

Python で特定の範囲内の完全な正方形をすべて取得するメソッドを作成しようとしています。2621163 と 520001400002 の間のような大きな範囲。明らかに、範囲を反復処理して、数値が完全かどうかを確認します。

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

そして、それを印刷することは、大きな範囲では愚かであり(小さな範囲ではうまく機能します)、永遠にかかります。この目的で利用できる Python の魔法または数学 (修正された Diophantine 方程式など) があるかどうか疑問に思っています。

編集:また、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を一桁で作ると7(倍)8=56! 34929456 は 8 桁の数字で、8-7=1+4=5 という意味です。つまり、答えは 5000 から 6000 の間にあるということです。5500 の 2 乗 = 30250000 を計算してみましょう。平方根が少し大きいことがわかります。それでは、5910 を試してみましょう。読んでくれてありがとう!:P、それが役に立てば幸いです!

于 2014-01-10T16:06:59.240 に答える
-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 に答える