2016-12-01 3 views
2

Я делаю программу, которая находит простые числа. Пользователю предлагается указать число, большее 2 (n), затем программа делает список, начинающийся с 2 и заканчивающийся номером пользователя (n). В моей программе я должен установить переменную с именем current to 2, а затем прокрутить список, ищущий кратность текущего и удаляя их. В конце цикла я добавляю 1 к текущему, и петли программы снова делают то же самое, что и раньше. Список печатается каждый раз. Моя программа работает правильно (я тестирую, используя номер 10 как n), когда она доходит до конца 10, остается, хотя она должна быть удалена. Пожалуйста помоги.
Python программа для поиска простых чисел (3.5)

Вот мой код:

while True: 
    global n 
    n = int (input ("Please enter a number larger than 2. ")) 
    if n > 2: 
     break 
    else: 
     print ("Your number is not larger than 2.") 
     continue 

current = 2 
myList = list (range (2, n + 1)) 
while current < n: 
    if current == []: 
     break 
    for i in reversed (range (len(myList)-1)): 
     if myList[i] % current == 0 and myList[i] != current and (myList[i]/current).is_integer(): myList.pop(i) 
     print (myList) 
    current = current + 1 
+0

Это похоже на дико запутанный способ найти простое число. – DejaVuSansMono

+0

@DejaVuSansMono Это довольно распространенная подсказка домашней работы. – TemporalWolf

+3

https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes –

ответ

4

for i in reversed (range (len(myList)-1)): должен быть for i in reversed (range (len(myList))):

диапазон по умолчанию не включает в себя последний номер: range(5) дает 0,1,2,3,4

Чтобы сделать это только выводить при его внесении:

if myList[i] % current == 0 and myList[i] != current and (myList[i]/current).is_integer(): 
    myList.pop(i) 
    print (myList) 

Если вы выполняете печать внутри оператора if, то только при внесении изменений он отображает новый список.

0

В вашей петле «для» есть проблема. Удалите «-1», и вы должны быть в порядке, поскольку диапазон включен, исключителен. Просто обратите внимание, что при поиске простых чисел в диапазоне (2, n) вам не нужно проверять n, только на sqrt (n). Проверьте эту ссылку. https://www.quora.com/Why-do-we-first-find-the-prime-numbers-up-to-square-root-of-N-in-segmented-sieve

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