我想打印所有素數,連續7個小於10000000000
。當使用range()
時,我得到一個MemoryError
,因爲生成的數組無法存儲,所以我將該循環更改爲while
循環。用大數字進行Python優化
但是這個程序真的很慢。打印找到的第一個號碼需要一分多鐘。
import math
def is_prime(n):
if n % 2 == 0 and n > 2:
return False
i = 3
while i < math.sqrt(n) + 1:
#for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
i += 2
return True
def is_super_happy(n):
count = 0
while n != 0:
if n%10 == 7:
count += 1
if count == 7:
return True
else:
count = 0
n /= 10
return count == 7
i = 7777777
while i < 10e10:
#for i in range(7777777, int(10e10)):
if is_super_happy(i) and is_prime(i):
print i
i += 1
我不能想到任何事情都可以讓這件事變得更快,我希望它變得非常快。
任何想法,提示?
你可以使用多利用其他CPU內核。 – 2014-11-04 15:06:23
不要使用'while',而是使用'xrange'而不是'range'(在Python 3中使用'range') – Unapiedra 2014-11-04 15:09:27
提示:你的數字都是十位數。其中7個是連續7次。有多少數字需要考慮? – RemcoGerlich 2014-11-04 15:15:47