Project Euler Problem 12 の次のコードがあります。ただし、実行に非常に時間がかかります。スピードアップするための提案はありますか?
n = input("Enter number: ")
def genfact(n):
t = []
for i in xrange(1, n+1):
if n%i == 0:
t.append(i)
return t
print "Numbers of divisors: ", len(genfact(n))
print
m = input("Enter the number of triangle numbers to check: ")
print
for i in xrange (2, m+2):
a = sum(xrange(i))
b = len(genfact(a))
if b > 500:
print a
n には 6 などの任意の数値を入力して、因数の数のリストの長さが実際に返されるかどうかを確認します。m には、80 000 000 と入力します。
少数の場合は比較的迅速に機能します。私が入力した場合b > 50
; a に対して 28 を返しますが、これは正しいです。