![](/img/trans.png)
[英]Why does loading a pickle object take so much longer than loading a file?
[英]Why does my first function to find a prime number take so much longer than the other?
我有兩個功能: isPrime
和alsoPrime
。 如果數字 (x) 是質數,兩者都意味着返回 True 或 False。 isPrime(x, pLis)
處理不斷增長的素數列表,並查看 x 是否是任何素數的倍數。 alsoPrime(x)
搜索從 3 開始到 x 的根結束的所有奇數。 然后我使用一個 for 循環,從 3 開始,以 2 為間隔上升。
我預計 isPrime 會更快,因為它應該跳過數字,即:
isPrime -> 3、5、7、11、13、17、19
還有素數 -> 3, 5, 7, 9 , 11, 13, 15 , 17, 19
但是alsoPrime
的速度也非常快 - 在搜索前 1 000 000 個數字時快 100 倍。
有人可以解釋為什么嗎? 每次調用pLis
都需要很長時間嗎?
def isPrime(x, pLis):
for item in pLis:
if x % item == 0:
return False
return True
def alsoPrime(x):
for i in range(3, round(x**0.5)+1, 2):
if x % i == 0:
return False
return True
當您真的只需要遍歷候選對象的正方形時,您正在遍歷您在isPrime
中發現的所有素數,就像您在alsoPrime
中所做的那樣。 更多的迭代意味着更慢的代碼。 驗證這一點的快速方法是計算迭代次數,如下所示:
def isPrime(x, pLis):
for i, item in enumerate(pLis):
if x % item == 0:
print(f"{x} is not prime after {i} iterations")
return False
print(f"{x} is prime after {i} iterations")
return True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.