我試圖解決Project Euler's problem #35加快字符串分割和拼接
的數量,197,被稱爲圓形素因的數字所有旋轉:197,971,719,本身就是黃金。
一百萬以下有多少個圓形素數?
這是我的解決方案:
import numpy as np
def problem(n=100):
circulars = np.array([], np.int32)
p = np.array(sieveOfAtkin(n), np.int32)
for prime in p:
prime_str = str(prime)
is_circular = True
for i in xrange(len(prime_str)):
m = int(prime_str[i:]+prime_str[:i])
if not m in p:
is_circular = False
if is_circular:
circulars = np.append(circulars, [prime])
return len(circulars)
不幸的是,for循環是強大的慢!任何想法我可以加快這一點? 我懷疑字符串連接是瓶頸,但我不完全確定! :)
任何想法? :)
爲什麼你使用字符串呢? – hwiechers 2011-01-25 12:29:07
不要爲`circulars`使用NumPy數組 - 它具有固定大小,並且需要在每次*調用`numpy.append()`時重新分配。 Python列表在這裏是更好的選擇。 (刪除numpy標籤,因爲既不是問題也不是當前答案與numpy有關。) – 2011-01-25 13:08:46