Primary generator in python up to 20

I do not understand why this code (python) does not create prime numbers from 1 to 20.

P = [2, 3]
p = 4
N = list(range(2, p))
M = list(range(1, p))
while True:
    for n in N:
        if p / n in M:
            p += 1
            if p == 20:
                print(P)
                break
        else:
            P.append(p)
            p += 1
            if p == 20:
                print(P)
                break

The idea was to start with 4 and check if the division between the number and the other (smaller) number of holes, if any, put it on the list and print the list at the end.

instead of printing printed strokes. [2, 3, 5, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

I know this is a very unforgivable way to find prime numbers, but I still don't understand why this is not working.

Thanks and sorry for my english.

+4
source share
2 answers

If you want to use the Python generator function to get prime numbers, you can do the following

def getPrimes(n):
    for i in range(2,n):
        if(len([j for j in range(2,i-1) if i%j==0]) == 0):
            yield i

n = 20
[i for i in getPrimes(n)]

[2, 3, 5, 7, 11, 13, 17, 19]


Python

def getPrimes(n):
    for i in range(n):
        if i < 3: yield i
        for j in range(2,i):
            if i % j == 0: break
            if j == i - 1: yield i

n = 20
primes = []
for i in range(2, n):
    if i < 3: primes.append(i)
    for j in range(2, i):
        if i % j == 0: break
        if j == i-1: primes.append(i)

primes

[2, 3, 5, 7, 11, 13, 17, 19]


n = 20
primes = []
for i in range(2, n):
    if i < 3: primes.append(i)
    elif len([j for j in range(2,i) if i%j==0]) == 0:
        primes.append(i)

primes

[2, 3, 5, 7, 11, 13, 17, 19]

+4

, . , , . :

primes = []
allPrimes = []

def sieve(n):
    global primes, allPrimes
    primes = [True]*(n+1)
    primes[0] = primes[1] = False
    i = 2
    while i*i <= n:
        if primes[i]:
            j = i*i
            while j <= n:
                primes[j] = False
                j += i
        i += 1
    allPrimes = [i for i in range(len(primes)) if primes[i]]

sieve(20)
print(allPrimes)

:

[2, 3, 5, 7, 11, 13, 17, 19]

, , ( ).

+1

Source: https://habr.com/ru/post/1696099/


All Articles