2015-12-28 3 views
-3

Я пробовал this проблема, но не смог получить правильный ответ. Может ли кто-нибудь помочь мне определить проблему в моем коде?Правильные тройные ответы не верны

Моя логика: используя команду seive, создал список простых чисел. Используя этот список простых чисел, я просто перепутал решение.

import math 
n = 50000000 
exponent = (2, 3, 4) 
prime_numbers = [True]*n 
prime_numbers[0] = False 
prime_numbers[1] = False 
max_prime = 2 

#prime number creation 
for i in range(2, int(math.sqrt(n))+1): 
     if prime_numbers[i]: 
      for j in range(i*i, n, i): 
       prime_numbers[j] = False 

# list of prime numbers 
list_data = [] 
for i in range(2, n): 
    if prime_numbers[i]: 
     if i**2 >= n: 
      break 
     list_data.append(i) 

count = 0 
for i, i_data in enumerate(list_data): 
    if i_data**4 >= n: 
     break 
    for j, j_data in enumerate(list_data): 
     if j_data**3 >= n: 
      break 
     for k, k_data in enumerate(list_data): 
      if k_data**2 >= n: 
       break 
      if (k_data**2 + j_data**3 + i_data**4) < n: 
       count += 1 
print(count) 
+0

Задача задает равную выписку 'if (k_data ** 2 + j_data ** 3 + i_data ** 4) Caridorc

+3

Что делать, если два варианта простых чисел производят одну и ту же сумму? – user2357112

+0

Вы можете разбить цикл 'for j', если' i_data ** 4 + j_data ** 3> = n', не так ли? Это должно сэкономить вам несколько итераций, если ничего другого. –

ответ

1

Я так и не получил выход из вашего кода. Я не дождался окончания сита.

Несколько советов:

  1. Сито очень медленно. Подумайте, что наибольшее количество, которое вам нужно, это квадратный корень из 50 000 000, и вы можете значительно ускорить его.

  2. Нет необходимости использовать enumerate. i, j, k никогда не используются.

  3. Вы считаете дубликаты. Используйте set, чтобы сохранить уникальные значения.

Я получил правильный ответ в течение нескольких секунд, учитывая сказанное выше, поэтому алгоритм работает иначе.

+0

О, извините, у меня есть ваша точка зрения о сиве. –

+0

просто добавил квадратный корень и добавил набор для uniques и нашел ответ. –

Смежные вопросы