2014-08-28 4 views
0

У меня проблемы с моим кодом. Вопрос:Project Euler # 7 Python

«Перечислив первые шесть простых чисел: 2, 3, 5, 7, 11 и 13, мы увидим, что 6-е число - это 13. Что такое 10 001-е простое число?»

Это то, что он выглядит следующим образом:

div = 10001 
i = 2 
count = 0 
prime = 0 
now = [] 

while count < div: 

    for x in range (2,i+1): 
     if len(now) ==2: 
      break 
     elif i%x == 0: 
      now.append(x) 

    if len(now)==1: 
     prime = i 
     count += 1 
    now = [] 
    i+=1  



print(prime) 

Я попытался ДИВ до 1000, и это, кажется, работает нормально (для DIV 1000 я получаю 7919). Однако, когда я пытаюсь div = 10001, я ничего не получаю, даже ошибки. Если бы кто-то помог мне, я был бы очень признателен. Спасибо.

+0

Это, вероятно, работает правильно, просто очень медленно. Подсказка: есть более эффективные способы вычисления простых чисел. – Kevin

+0

Как долго вы ждали? Для завершения выполнения этого кода потребуется * длительное время. – recursive

+0

@ Kevin да, его работа я просто проверил, он работает. Любой способ сделать это быстрее? –

ответ

1

Попробуйте этот код:

prime_list = lambda x:[i for i in xrange(2, x+1) if all([i%x for x in xrange(2, int(i**0.5+1))])][10000] 
print prime_list(120000) 

Lambda в Python определяет анонимную функцию и xrange подобен диапазону, определяя диапазон целых чисел. Код использует понимание списка и проходит через два раза до квадратного корня из конечного числа (таким образом, i ** 0,5). Каждый номер удаляется, если он кратен числу, которое находится в диапазоне. Вы остаетесь со списком простых чисел по порядку. Итак, вам просто нужно распечатать номер с правильным индексом.

+0

... и почему это работает? Что оно делает? Как это соотносится с кодом, опубликованным OP? – 2014-09-21 23:50:46

+0

Это дает вам решение проблемы euler_7, 10001st простое число (поскольку нумерация python основана на 0). –

+0

Да, да. Но почему***? Что означает xrange? или лямбда? Как все это сочетается, чтобы дать ответ? И это говорит о том, что он даже не исправил или не рассмотрел проблему, о которой говорил OP, с запросом кода. Его что-то * совершенно * другое, что не помогает ОП учиться чему угодно, ни другому человеку. – 2014-10-31 03:31:36