Простые числа в Python - PullRequest
       4

Простые числа в Python

3 голосов
/ 18 января 2012

Я пытался написать программу, которая бы отображала простые числа от 2 до 200.

Это программа, которую я написал.

liste = [ ]
liste.append(2)
liste = [2]

for primeCandidate in range (2,10):
    isPrime = True
    for divisor in range (2,primeCandidate):
        if primeCandidate % divisor == 0:
            isPrime = False
            break
        if isPrime:
            liste.append(primeCandidate)
            print(liste)

Но я всегда получаю неправильный вывод. И я не мог найти свои ошибки. Можете ли вы помочь мне найти мои ошибки?

Ответы [ 2 ]

3 голосов
/ 18 января 2012

Выпрыгивают две вещи:

(1) Вам не нужно устанавливать liste на [2] в начале; ваш цикл PrimeCandidate включает 2, поэтому вы получите 2 дважды, если вы это сделаете.

(2) Ваше "if isPrime" слишком глубоко на один уровень. Вы можете доверять isPrime только после того, как проверили делители кандидатов. (Ну, на самом деле вы проверяете больше, чем нужно, но это только проблема эффективности, а не ошибка.) Если быть точным:

liste = []
for primeCandidate in range (2,100):
    isPrime = True
    for divisor in range (2,primeCandidate):
        if primeCandidate % divisor == 0:
            isPrime = False
            break
    if isPrime:
        liste.append(primeCandidate)
        print(liste)
1 голос
/ 18 января 2012
from math import sqrt


def isPrime(num) :
    if num in [2,  3 ] : return True
    elif num < 2: return False 
    for i in [2]  +  range(3, int(sqrt(num)),  2) :
        if not num % i: return False 
    return True 

liste = [i for i in range(2,  201) if isPrime(i)] 

Примечание. В Python 3.x range() возвращает объект range, а не list, поэтому вам придется изменить

for i in [2] + range(3, int(sqrt(num)), 2):

до

for i in [2] + list(range(3, int(sqrt(num)), 2)):

чтобы избежать результирующего TypeError.

...