Я пытаюсь разработать решето простых чисел, и на бумаге мой алгоритм имеет смысл на бумаге, но возвращает очень короткий выбор составных чисел среди простых чисел, ТОЛЬКО выше квадратного корня.
Например, с пределом (нахождение всех простых чисел до предела) 10000 (что имеет квадратный корень из 100), составные числа, которые он смешал с его простыми числами, составляют 115, 119, 121 и 125 (все очень близко к (и выше!) 100).
Пожалуйста, дайте мне знать, что не так с моим кодом и какие части нужно исправить / как это исправить.
УТОЧНЕНИЕ: меня беспокоит составной (не простые числа), который он возвращает, где в моем тестировании на простоту я ошибся и как я могу это исправить?
Вот мое сито:
def primes(limit):
# Just make an empty list where the primes go
prime = []
# This next for loop just adds all the numbers of the form 6n+/-1 to the list, as all primes are of this form
for i in range(1,limit / 6 + 1):
prime.append(6*i - 1)
prime.append(6*i + 1)
# If the limit is divisible by 6, the last number on the list is sometimes over the limit
if limit % 6 == 0 and prime[-1] > limit:
prime.remove(prime[-1])
# This next line just finds the place of the 'square root' of the limit, which is as high as it has to check for factors
squareroot = min(range(len(prime)), key=lambda i: abs(prime[i]-(limit**0.5))) + 1
# Removing composites BELOW the square root
for p in prime[:squareroot][:]:
for f in range(2, int(p ** 0.5) + 1):
if p % f == 0:
prime.remove(p)
break
# Removing composites ABOVE the square root
for f in prime[:squareroot][:]:
for p in prime[squareroot:]:
if p % f == 0:
prime.remove(p)
return [2, 3] + prime
{}
, чем ввести это предложение. - person   schedule 17.03.20166n +/- 1
. - person Peter Wood   schedule 17.03.20162
и3
. - person Peter Wood   schedule 17.03.2016limit
это не удается? - person Peter Wood   schedule 17.03.20162
и3
как факторы, потому что кратные6
имеют2
и3
как множители, а+/-1
- нет. - person Peter Wood   schedule 17.03.2016limit=1000
не имеет115
в простых числах, ноlimit=10000
имеет.limit=8101
это когда появляется .. - person Peter Wood   schedule 17.03.2016