Простое число Python для другого диапазона - PullRequest
0 голосов
/ 20 ноября 2018
lower = int(input("from:"))
upper = int(input("to:"))
for num in range(lower,upper + 1):
   if num > 1:
       for i in range(2,num):
           if (num % i) == 0:
               break
       else:
           print(num)

Почему этот код печатает "2" как простое число?(это так, но не должно его печатать)

2% 2 == 0, поэтому его следует пропустить ...

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Другие отметили ошибку в коде range(start,end).Исправляя это, ваш код для простых чисел может быть переписан следующим образом:

lower = int(input("from:"))
upper = int(input("to:"))
for num in range(lower,upper + 1):
   if num > 1:
       for i in range(2,max(num,3)):
           if (num % i) == 0:
               break
       else:
           print(num)

Это не самый быстрый способ запоминания простых чисел, каждое потенциальное простое число должно быть проверено на КАЖДОЕ меньшее число в качестве возможного делителя.Гораздо быстрее вместо этого посчитать вверх и вычислить кратные меньшего числа.Таким образом, нам нужно выполнить математику только один раз для каждого возможного делителя.

Для полноты, вот программа, которая может эффективно производить простые числа (использует метод сита Эратосфена).

#### INPUTS    
lower = int(input("from:"))
upper = int(input("to:"))

### Code
n = upper
prime_booleans = [True for i in range(n+1)] 
p = 2
while (p * p <= n): 

    # Is current number a prime, eliminate the numbers that are multiples of it 
    if (prime_booleans[p] == True): 
        for i in range(p * 2, n+1, p): 
            prime_booleans[i] = False
    p += 1

# Print all prime numbers 
for p in range(lower, n): 
    if prime_booleans[p]: 
        print p, 
0 голосов
/ 20 ноября 2018

Когда num равно 2, range(2, num) пусто, поэтому проверка if (num % i) == 0: не выполняется и выполняется блок else.

...