有人可以解釋爲什麼這代碼,是用樣本數13195,但崩潰時我用的是問題的數量項目歐拉數3
num = 13195
def isprime(num):
for i in range(2,num):
if num % i == 0:
ans = i
return ans
print isprime(isprime(isprime(num)))
有人可以解釋爲什麼這代碼,是用樣本數13195,但崩潰時我用的是問題的數量項目歐拉數3
num = 13195
def isprime(num):
for i in range(2,num):
if num % i == 0:
ans = i
return ans
print isprime(isprime(isprime(num)))
您需要將默認值賦給ans
。
當輸入號碼是質數時,程序從不將任何內容分配給變量ans
。所以,當函數試圖返回這個變量時,它實際上並沒有被定義。
這不是OP一直存在的問題。輸入數字非常大,函數沒有返回'ans'。 –
這是一個很好的觀點,是真的。但'13195'不足以產生這個問題。 – JoseKilo
這就是爲什麼他說它適用於13195.問題號碼是600851475143. –
在Python 2中,range
構造一個列表。所以這個程序試圖在內存中包含一個巨大的列表,但它不能。使用xrange
這將生成迭代的需求數量,而不是一次。
您還需要儘早結束循環,否則它將花費永遠檢查如此多的數字。所以一旦找到一個除數,就用它來分割原來的數字,並使它變小,因而易於管理。
你爲什麼要調用'isprime(isprime(isprime(num)))'?它不應該只是一個電話嗎? –
你可以引用這個作業嗎?你是否考慮過輸入'num = 1':它會返回'None' ... –
因爲效率太低,找到另一種算法(例如:https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes) – Ouss4