これは、n番目の素数を取得する関数です。私はそれが前に行われていることを知っていますし、私の方法はあまり効率的ではないかもしれません(新しいコーダーは過去に微妙に変化していました)。 とにかく、以下のコードは動作し、指定されたインデックスの素数を返します。 すなわち:Python 3:100以上のインデックスのリストは、インデックス47の後に戻って循環します。なぜですか?どうやってこれをやめるの?
ind = 4
final[1,2,3,5,7,11]
return final[ind-1]
returns: 5
しかし、最終[51-1]はいただきました!最後の[3-1]でを返します。インデックス47の後のように、ループして戻ってきます。私はファイナルに含まれるリスト全体を印刷しました。 47歳を過ぎてもすべての素数を印刷します。何が起きているのかわかりません。 Pythonのリストにはいくつかの制限がありますか?ここで
コードです:
def nthPrime(ind): #gets nth prime number. IE: 5th prime == 11. works based off very in-efficient version of Sieve of Eratosthenes. but in increments of 200
p = {}
T = 2
incST = 2
incEND = incST + 200
final=[1]
while len(final) < ind:
for i in range(incST,incEND):
p[i] = True
while T <= math.sqrt(incEND):
l = 0
while l <= incEND:
p[T**2 + (T*l)] = False
l+=1
if T**2+(T*l) > incEND:
break
for k,v in p.items():
if p[k] == True and k > T:
T = int(k)
break
for k in p:
if p[k] == True:
final.append(k)
incST = incEND + 1
incEND = incST + 200
'''
currently function works perfectly for
any index under 48.
at index 48 and above it seems to start
back at index 1.
IE: final[51]
^would actually return final[4]
'''
return final[ind-1]
あなたの方法が何であるか(可能な限り簡潔に)言葉で説明しようと、あなたはそれを実装しようとしたか、バグはおそらくかなり明らかにされる場合早く。 – ekhumoro
www.pythontutor.comでいつでもPythonコードを視覚化して、どこが間違っているのかを理解することができます。 – Arya