Я сгенерировал простые числа до определенной точки, затем сравнил с ним список чисел, но ответ, который я получаю, намного ниже, чем правильный ответ, и я не знаю, почему. Мой ответ был 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 ... or-in-code
Мобильная версия