2013-04-13 81 views
0

我想寫一個方法到在Python中獲取給定範圍內的所有完美正方形。大範圍的像2621163和520001400002.之間現在很明顯,通過迭代範圍和檢查,如果一個號碼是完美的,像這樣Python - 在給定的大數範圍內找到所有完美正方形的最快方法

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

,然後打印是愚蠢的大範圍(小範圍的偉大工程),並會採取永遠。我想知道是否有任何可用於此目的的Python魔術或數學(例如修改的丟番圖方程)。

編輯:另外我使用Python 3.X,所以我可以使用大整數。

回答

8

您可以簡單地找到在指定範圍內具有正方形的最小和最大數字。然後您可以返回該範圍內每個數字的正方形。

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

想象數爲34929456,可以來知道它是不是一個完美的正方形時,它的分裂爲3:4:9:2:9:4:5:6 = 42。42 ISN '平方數,這意味着34929456不是一個完美的廣場! (我沒有使用任何計算器)現在我們知道它不是一個完美的方塊,你會圍繞它/向下... 所以,你拿最後2位數字,56!使用單個數字56是7(Times)8 = 56! 34929456是一個8位數字,因此意味着8-7 = 1 + 4 = 5。所以這意味着答案在5000到6000之間。現在,你做一些猜測。讓我們做5500平方= 30250000.所以我們知道平方根有點大!現在讓我們試試5910. 5910平方= 34928100.所以我們知道我們知道答案在5910和5911之間!謝謝閱讀! :P,希望它有幫助!

相關問題