Поиск доли простых чисел в списке, ошибка в коде (Python)Python

Программы на Python
Ответить
Anonymous
 Поиск доли простых чисел в списке, ошибка в коде (Python)

Сообщение Anonymous »

Я знаю, что мой код не подходит для этой задачи, так как он слишком медленный, но я также хочу выяснить, в чем моя ошибка, и не могу.
Задача состоит в том, чтобы найти точку, в которой доля простых чисел в списке падает ниже определенного процента (диагонали в этой спирали чисел ниже)
Я сгенерировал простые числа до точки, затем сравнил с ней список чисел, но ответ, который я получаю, намного ниже, чем правильный ответ, и я не знаю почему. Мой ответ был 631 (для менее 10%), правильный ответ - где-то 26000.
Как уже было сказано, я знаю, что мой подход не работает, поэтому я повторю его, но я также хочу знать, почему я все равно получаю неправильный ответ.
Спасибо за любую помощь.
Изображение

len_limit = 6 # for generating primes. I've adjusted this limit based on how far I get up to
limit = 10 ** len_limit
primes2 = [True] * (limit + 1)
primes2[0] = primes2[1] = False
for i in range (2,int(limit ** 0.5) + 1):
for n in range(2, int(limit / i) + 1):
primes2 [i*n] = False
primes = []
for i in range(len(primes2)):
if primes2 == True:
primes.append(i)

def make_square(side_length): # making all the numbers into a list
a,b = 0,0
nums = [1]
square_size = side_length
for n in range(2,square_size):
nums.append(4 * n ** 2 - 10 * n + 7) # NE
nums.append((2*n - 1) ** 2) # SE
nums.append(4 * n ** 2 - 8 * n + 5) # NW
nums.append(4 * n ** 2 - 6 * n + 3) # SW
nums.sort()
return nums

def fraction_prime(side_length):
nums = make_square(side_length)
a,b = 0,0
for num in nums:
if num in primes:
a += 1
b += 1
else:
b += 1
return (a/b)

i = 3
while True:
i += 1
fraction_prime(i)
side_length = 2 * i - 3
# print(fraction_prime(i),side_length,i) # optional, just to check that it was working
if fraction_prime(i)

Подробнее здесь: https://stackoverflow.com/questions/798 ... ode-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»