[英]Way to express prime factors of a number
我的任務是返回整數(n)的素數。 我的問題是我該如何用數學表達式來表示編碼? 我知道素數是只能被1本身整除的數字,但不知道如何將其放入代碼中。
但是,我確實找到了這種編碼有效,但是我不知道為什么:
def primes(n):
primfac = []
d = 2
while d*d <= n:
while (n % d) == 0:
primfac.append(d)
n //= d
d += 1
if n > 1:
primfac.append(n)
return primfac
有人可以向我解釋為什么這種編碼有效嗎? 為什么選擇d
作為2而不是1來開始? 另外,為什么他對d
求平方並檢查它是否等於或小於n? 等等。
d
從2開始,因為湯姆·卡爾澤斯 ( Tom Karzes)提到,您最終會得到一個無限的1s列表。 他對d
求平方並檢查它是否等於n
的原因是因為您只需要檢查數字的平方根即可確定其因數,而math.sqrt()
的計算量要比對平方的平方花費更多。 它的作用是檢查d
是否為n
的因數,直到d
達到n
平方根為止。 然后,他附加了d
因為已將其檢查為一個因素。
您對代碼還有其他不了解的地方嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.