2016-01-08 4 views
2

Я пытаюсь найти каждое простое число в выбранном пользователем диапазоне, перечислить их и посчитать. мой код и номер списка, которые не являются первыми. Я действительно не могу найти почему? Может кто-нибудь, пожалуйста, помогите мне.Код python пытается найти простое число. Код подсчитывает не простое число. Не могу найти почему

print("This code will count how many prime number exist in a certain range") 
count = 0 
lower = int(input("Enter lower range: ")) 
upper = int(input("Enter upper range: ")) 
prime = [] 
for num in range(lower, upper + 1): 
    if num > 1: 
     for i in range(2,num): 
      if (num % i) == 0: 
       break 
      else: 
       prime.append(num) 
       break 
print(prime) 
print("There are", len(prime), "prime number between", lower, "and", upper) 

ответ

1

Проблема здесь,

for i in range(2,num): 
     if (num % i) == 0: #If num is divisible by SOME i, it is not prime. Correct. 
      break 
     else:     #If num is not divisible by SOME i, it is not prime. WRONG. 
      prime.append(num) 
      break 

Вы должны быть проверены состояние, как это: If num is not divisible by ANY i, it is prime.

С минимальными изменениями с использованием еще с для,

for i in range(2,num): 
     if (num % i) == 0: 
      break 
    else: 
     prime.append(num) 

Подробнее: Why does python use 'else' after for and while loops?

1

Неправильная часть вашего праймера. Я собираюсь абстрагироваться от этого другого метода, чтобы сделать его проще. Чтобы быть простым, n%x должен задержать для любого x таким образом, чтобы x находился в наборе цифр [2,ceil(sqrt(n))].

Убедитесь, что вы import math

def is_prime(num): 
    for i in range(2, math.ceil(num**(1/2))): 
     if num%i==0: 
      return False 
    return True 

Тогда просто заменить

if num > 1: 
    for i in range(2,num): 
     if (num % i) == 0: 
      break 
     else: 
      prime.append(num) 
      break 

С,

if num>1: 
    if is_prime(num): 
     prime.append(num) 
1

Ваша проблема заключается в том, что вы не ждать, все проверки деления для добавления список номеров:

  if (num % i) == 0: 
       break 
      else: 
       prime.append(num) 
       break 

Исправление кода:

 is_prime =True 
     for i in range(2,num): 
      if num % i == 0: 
       is_prime = False 
       break 

     if is_prime: 
      prime.append(num) 

$ python prime_test.py 
This code will count how many prime number exist in a certain range 
Enter lower range: 12 
Enter upper range: 20 
[13, 17, 19] 
('There are', 3, 'prime number between', 12, 'and', 20) 
+0

Чтобы быть простым, все модуль NUM% я должен не равен нулю. 2% 2 == 0. – intboolstring

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