A question.

Remco Gerlich scarblac at pino.selwerd.nl
Tue Dec 12 13:00:30 CET 2000


DeHa <deha at poczta.onet.pl> wrote in comp.lang.python:
>     I am new to Python, and just try to write my first program. But I have a
> small problem.
> 
>     My program should find first numbers in the set from 1 to 100000. I made
> such a code:

You probably meant prime numbers.
> 
> first = range(100001)
> first = first[1:]

Instead, simply first = range(1,100001) would be easier. Actually,
the range should start at 2, since that is the first prime number
(and you don't want to delete numbers that are divided by 1).

> for i in first:
>     if i != []:
> #until end of the list

"for i in first" means that i will become all the elements of first in turn.
So i never becomes [], since first only contains integers. And it already
loops until the end of the list.

>         for j in first[first.index(i):]:                           #find all
> numbers divided by i

This also includes the number i itself, it shouldn't.

>             if j % i == 0:
>                 first[first.index(j): first.index(j)] = []    #and delete it
> from the list

You are deleting from a list while you are walking through it with 'for',
that's a bit tricky.

>     And it doesn't work, and I don't konw why? Could anyone help me? I try
> to find answer in the tutorial, but the information in it doesn't change
> anything.

It is easier to start with an empty list of primes, and add numbers that
can't be divided by the numbers in the list.

Something like this:

primes = [2]  # We need one prime to start with
for candidate in range(3, 100001, 2):    
    for prime in primes:
        if candidate % prime == 0:
            break
    else: 
        # The 'else' clause happens when the 'break' never happened
        primes.append(candidate)


This is not the fastest solution, but it works.

-- 
Remco Gerlich



More information about the Python-list mailing list