В поисках первоклассного проекта Эйлера - PullRequest
0 голосов
/ 03 июня 2019

Найдите 10 001-е простое число.

Я пытаюсь решить проблемы с Project Euler, не используя копирование и вставку кода, который я не понимаю.Я написал код, который определяет, является ли число простым или нет, и пытаюсь изменить его так, чтобы он проходил через первые 10 001 простых чисел.Я думал, что это будет проходить через цифры до моего перерыва, но это не работает, как предполагалось.Имейте в виду, что я попробовал несколько других способов, чтобы закодировать это, и это было то, что я думал, может работать.Я предполагаю, что я немного испортил то, что у меня было раньше.

import math
import itertools
counter = 0
counters = 0
for i in itertools.count():
    for n in range (2, math.ceil(i/2)+1):
        if i%n == 0:
            counter+=1
    if counter == 0 or i == 2:
        counters+=1
    if counters == 10001:
        break
    else:
        pass
print(i)

1 Ответ

0 голосов
/ 03 июня 2019

Вы очень близки к правильному решению. Не забудьте в следующий раз рассказать нам, что именно вы ожидали и что получили вместо этого. Не пиши что-то вроде

но он не работает как положено

Вот некоторые изменения, которые вы должны сделать, чтобы заставить его работать и чтобы он был быстрее!

import math
import itertools
counter = 0
counters = 0
nth_prime = 0
for i in itertools.count():
    # ignore numbers smaller than 2 because they are not prime
    if i < 2:
        continue
    # The most important change: if you don't reset your counter to zero, all but the first prime number will be counted as not prime because your counter is always greater than zero
    counter = 0
    for n in range (2, math.ceil(i/2)+1):
        if i%n == 0:
            counter = 1
            # if you find out your number is not prime, break the loop to save calculation time
            break;

    # you don't need to check the two here because 2%2 = 0, thus counter = 1    
    if counter == 0:
        counters+=1
    else:
        pass
    if counters == 10001:
        nth_prime = i
        break
print(nth_prime)

Этот код занял у меня 36,1 секунды, чтобы найти 104743 в качестве 10,001-го простого числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...