我正在Python中實現Eratosthenes的Sieve。它返回合數附近的搜索範圍的終點:Eratosthenes的篩子返回大的合成數(這是一個錯誤)
def primes_Ero(n=1000):
primes = []
a = [True]*(n+1)
a[0] = a[1] = False
for (i,isprime) in enumerate(a):
if isprime:
for n in range(i*i,n+1, i):
a[n] = False
primes.append(i)
return primes
當使用更大的數字,Ñ,我最終合數。我做了一個檢查,看看哪些號碼複合(相比於強力法),
鑑於ñ,什麼號碼是複合:
n= 100; []
n= 500; [493, 497]
n= 1000; [961, 989]
n= 10000; [9701, 9727, 9797, 9853, 9869, 9917, 9943, 9953, 9983, 9991, 9997]
我在做什麼錯?
'if i == 31:'的意圖是什麼? –
另外,你使用'n'來做兩件事情。 –
@PaulHankin明白了。更改內部for循環中的變量,例如:'對於範圍(i * i,n + 1,i)中的k':'並且問題消失。 – jas